需要更新我们服务器上的所有数据库,并在每个数据库上执行相同的逻辑.有问题的数据库都遵循一个通用的命名方案,如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) 有人可以解释为什么我必须在这里输入10个单引号才能将它存储在列中吗?我试图理解这个逻辑..
exec('UPDATE [SomeTable] SET [SomeColumn] = '''''''''''', [AnotherColumn] = Null ')
Run Code Online (Sandbox Code Playgroud)
我一直在添加引号,直到我得到我想要的所需输出但现在我想知道为什么我必须输入这么多引号.