Удалить столбец из нескольких таблиц в конкретной схеме в SQL Server

#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. Спасибо за помощь, он работает правильно, как я хочу.