小编Che*_*ise的帖子

是否可以优化或重写此光标以获得最佳性能?

需要更新我们服务器上的所有数据库,并在每个数据库上执行相同的逻辑.有问题的数据库都遵循一个通用的命名方案,如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)

t-sql database sql-server cursor

3
推荐指数
1
解决办法
754
查看次数

为什么我必须在动态sql中键入这么多单引号来转义引号?

有人可以解释为什么我必须在这里输入10个单引号才能将它存储在列中吗?我试图理解这个逻辑..

exec('UPDATE [SomeTable] SET [SomeColumn] = '''''''''''', [AnotherColumn] = Null ')
Run Code Online (Sandbox Code Playgroud)

我一直在添加引号,直到我得到我想要的所需输出但现在我想知道为什么我必须输入这么多引号.

sql t-sql sql-server sql-server-2005

1
推荐指数
1
解决办法
1807
查看次数

标签 统计

sql-server ×2

t-sql ×2

cursor ×1

database ×1

sql ×1

sql-server-2005 ×1