Che*_*ise 3 t-sql database sql-server cursor
需要更新我们服务器上的所有数据库,并在每个数据库上执行相同的逻辑.有问题的数据库都遵循一个通用的命名方案,如CorpDB1,CorpDB2等.而不是为每个有问题的数据库(超过50个)创建一个SQL代理作业,我考虑过使用游标迭代数据库列表然后在每个上执行一些动态sql.鉴于游标应该是最后手段的普遍观念; 是否可以通过使用未记录的sp_MSforeachdb存储过程来重写以获得更好的性能或以其他方式编写?
DECLARE @db VARCHAR(100) --current database name
DECLARE @sql VARCHAR(1000) --t-sql used for processing on each database
DECLARE db_cursor CURSOR FAST_FORWARD FOR
SELECT name
FROM MASTER.dbo.sysdatabases
WHERE name LIKE 'CorpDB%'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @db
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'USE ' + @db +
' DELETE FROM db_table --more t-sql processing'
EXEC(@sql)
FETCH NEXT FROM db_cursor INTO @db
END
CLOSE db_cursor
DEALLOCATE db_cursor
Run Code Online (Sandbox Code Playgroud)