Sql server 使用SQL Server中的游标,在每个客户数据库上正确执行SQL Server代理作业的调用

Sql server 使用SQL Server中的游标,在每个客户数据库上正确执行SQL Server代理作业的调用,sql-server,cursor,Sql Server,Cursor,需要更新SQL Server代理作业(xyz)以删除存储过程(sp_abc)的使用,并使用SQL Server中的游标在每个客户数据库上正确执行SQL Server代理作业(xyz)的调用 需要帮助,如何写下代码如何查看所有用户数据库的列表: SELECT *, name, database_id, create_date FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb'); DECLARE

需要更新SQL Server代理作业(xyz)以删除存储过程(
sp_abc
)的使用,并使用SQL Server中的游标在每个客户数据库上正确执行SQL Server代理作业(xyz)的调用


需要帮助,如何写下代码

如何查看所有用户数据库的列表:

SELECT *, name, database_id, create_date  
FROM sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
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;
以及如何使用光标查找所有用户数据库:

SELECT *, name, database_id, create_date  
FROM sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');
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;
最后,如果您对每个数据库都有存储过程(
sp_abc
),则答案如下:

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;