我想在数据库中的大约一百张表中添加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个表应该是可行的,即使有点慢。