【发布时间】:2019-02-18 10:14:57
【问题描述】:
我想在我的数据库中的大约一百个表中添加 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 个表,即使有点慢也应该可行。
【问题讨论】:
标签: sql sql-server-2012 cursor dynamic-sql