遍历结果集

时间:2018-09-13 16:10:30

标签: sql sql-server-2012 cursor dynamic-sql

我想在数据库中的大约一百张表中添加4个新列。为此,我使用以下内容:

SET NOCOUNT ON
DECLARE @T NVARCHAR(100)
DECLARE @SQL NVARCHAR(MAX)

DECLARE TABLE_CURSOR CURSOR FOR 
SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '%ABC_%'

 OPEN TABLE_CURSOR

 FETCH NEXT FROM TABLE_CURSOR 
 INTO @T
    WHILE @@FETCH_STATUS = 0
        BEGIN

            SET @SQL = N'ALTER TABLE ' + Quotename(@T) +
                'ADD COL1 NVARCHAR(50),
                    COL2 NVARCHAR(50),
                    COL3 NVARCHAR(10),
                    COL4 NVARCHAR(6)'
            EXEC (@SQL)

        END 
CLOSE TABLE_CURSOR  
DEALLOCATE TABLE_CURSOR

我也尝试使用+@T +代替Quotename,但是发生的是将列添加到结果集中的第一个表中,但是随后由于内存不足异常错误而崩溃。

是否有更好/有效的方法遍历结果集并添加这些列?我可以构建一个SSIS来做到这一点,但不能保证它会起作用。我知道游标通常很慢,但我认为100个表应该是可行的,即使有点慢。

0 个答案:

没有答案