Используя SQL Server и T-SQL, как я могу обновить ВСЕ таблицы таблиц с определенным именем, но разными схемами в одной базе данных?
: Обновление:
Обновления включают добавление / удаление / изменение столбцов, а также изменение определенных значений строк.
Я хочу иметь возможность развертывать изменения в таблице во всех схемах. Используя конструктор таблиц SQL Server Management Studio, когда я делаю изменения и сохраняю, это позволяет мне сохранить сценарий, который можно использовать для развертывания этих изменений в другой таблице. Я хочу использовать этот сценарий для всех таблиц с определенным именем во всех схемах.
: обновление 2:
Существует причина, по которой этот запрос заключается в том, что я хочу убедиться, что обновление определенной таблицы в нескольких схемах легко. В будущем мое приложение, несомненно, изменится, и если я увижу, что сложно или неэффективно обновить схемы, я решу использовать что-то еще.
Ниже я попробовал:
DECLARE @update_sql NVARCHAR(max)
DECLARE @table_name VARCHAR(45)
DECLARE c_tables CURSOR FOR
SELECT t.table_name
FROM INFORMATION_SCHEMA.TABLES t
WHERE t.table_name = 'TestTable'
AND t.table_catalog = 'MyDataBase'
OPEN c_tables
FETCH c_tables INTO @table_name
WHILE @@Fetch_Status = 0
BEGIN
SET @update_sql = N'ALTER TABLE '+@table_name+' ADD ColumnThree nvarchar(50) NULL'
EXEC sp_executesql @update_sql
END
CLOSE c_tables
DEALLOCATE c_tables
При выполнении этого генерируется следующая ошибка:
Не удается найти объект "TestTable", так как он не существует или у вас нет прав.
Таблица существует, и я работаю под dbo
, который является владельцем схемы.
Я также заметил, что для выполнения запроса требуется некоторое время, даже если в базе данных есть только 7 таблиц и 3 схемы, используемые в этих таблицах. Будет ли эффективнее просто войти в систему с владельцем каждой схемы и запустить общий сценарий? Каждый владелец схемы будет иметь доступ только к своей соответствующей схеме и таблицам.