Я хочу добавить 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 таблиц это должно быть выполнимо, даже если немного медленно.