#sql-server-2008-r2 #alter-table #alter
#sql-server-2008-r2 #alter-таблица #изменить
Вопрос:
У меня есть много таблиц, содержащих столбец как «RowId» В разных схемах, таких как dbo, stg, tmp и т. Д., Но я хочу удалить столбец только из таблиц схемы stg.
пожалуйста, укажите сценарий для выполнения вышеуказанного условия.
Заранее спасибо
Ответ №1:
сначала создайте резервную копию
DECLARE @SqlStatement VARCHAR(MAX)
SELECT @SqlStatement =
COALESCE(@SqlStatement, '') 'ALTER TABLE [stg].'
QUOTENAME(TABLE_NAME) ' DROP COLUMN [RowId];' CHAR(13)
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN sys.objects o ON o.name=t.TABLE_NAME
INNER JOIN sys.columns c ON o.object_id= c.object_id
WHERE TABLE_SCHEMA = 'stg' and c.name='RowId'
PRINT @SqlStatement
После того, как вы уверены, выполните инструкцию dinamyc SQL
exec sp_executesql @SqlStatement
Комментарии:
1. Для больших таблиц это может быть очень медленно. Часто может быть намного быстрее создать новую таблицу, дубликат старой, но с изменениями, и вставить данные. Удалите старую таблицу, а затем переименуйте новую таблицу
2. Спасибо за помощь, он работает правильно, как я хочу.