Search code examples
sql-servercursor

Properly execute the calling of SQL Server Agent job on each customer database by using cursors in SQL Server


Need to update the SQL Server Agent job (xyz) to remove usage of stored procedure (sp_abc) and properly execute the calling of SQL Server Agent job (xyz) on each customer database by using cursors in SQL Server.

Need help, how to write down the code


Solution

  • How you can see the list of all user database :

    SELECT *, name, database_id, create_date  
    FROM sys.databases
    WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
    

    and how to use the cursor to seek all user database :

    DECLARE @DatabaseName VARCHAR(MAX)
    
    DECLARE DatabaseList CURSOR FOR 
    SELECT name
    FROM sys.databases
    WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
    OPEN DatabaseList;
    FETCH NEXT FROM DatabaseList INTO @DatabaseName;
    WHILE @@FETCH_STATUS = 0
        BEGIN
            PRINT @DatabaseName
            --Exec your SP
        FETCH NEXT FROM DatabaseList INTO @DatabaseName;
        END;
    CLOSE DatabaseList;
    DEALLOCATE DatabaseList;
    

    Finally, if you have stored procedure(sp_abc) for every single database this is the answer :

    DECLARE @DatabaseName NVARCHAR(MAX)
    DECLARE @SQL NVARCHAR(MAX)
    
    DECLARE DatabaseList CURSOR FOR 
    SELECT name
    FROM sys.databases
    WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
    OPEN DatabaseList;
    FETCH NEXT FROM DatabaseList INTO @DatabaseName;
    WHILE @@FETCH_STATUS = 0
        BEGIN
            PRINT @DatabaseName
            --Exec your SP
            Set @SQL = CONCAT(@DatabaseName, '.dbo.', 'sp_help')
            PRINT @SQL
            EXECUTE sp_executesql @SQL
    
        FETCH NEXT FROM DatabaseList INTO @DatabaseName;
        END;
    CLOSE DatabaseList;
    DEALLOCATE DatabaseList;