带有动态 SQL 查询的游标

Yei*_*or 0 sql sql-server dynamic-sql cursor

我正在尝试使用游标进行动态查询,我想为数据库上的每个表创建文件组,我有这个:

DECLARE @name VARCHAR(50)
DECLARE @query VARCHAR(50)

DECLARE vend_cursor CURSOR
    FOR SELECT name FROM sys.tables order by name asc

OPEN vend_cursor
FETCH NEXT FROM vend_cursor;  

WHILE @@FETCH_STATUS = 0   
BEGIN   

    PRINT 'FG_'+@name
    FETCH NEXT FROM vend_cursor INTO @name;  
END   

CLOSE vend_cursor   
DEALLOCATE vend_cursor
Run Code Online (Sandbox Code Playgroud)

打印是因为这样我就可以看到文件组名称的样子,但我想添加以下内容: ALTER DATABASE AdventureWorks2012 ADD FILEGROUP FG_filegroupname

我知道我必须使用“exec sys.sp_executesql”,但是如何将其添加到我的查询中?提前致谢

Jef*_*rey 5

是的,您可以使用 sp_executeSQL 执行此操作,但最重要的是您需要设置 GLOBAL 游标,因为 sp_executeSQL 与您正在执行的过程不在同一范围内。参见示例

DECLARE @SQL nvarchar(1024), 
        @name varchar(255);

SET @SQL = 'DECLARE vend_cursor CURSOR GLOBAL
               FOR
               SELECT name FROM sys.tables order by name asc';

EXECUTE sp_executesql @SQL;
OPEN vend_cursor
FETCH NEXT FROM vend_cursor INTO @name;  

WHILE @@FETCH_STATUS = 0   
BEGIN   

    PRINT 'FG_'+@name
    FETCH NEXT FROM vend_cursor INTO @name;  
END   

CLOSE vend_cursor   
DEALLOCATE vend_cursor
Run Code Online (Sandbox Code Playgroud)