Как сделать массовое обновление просмотров? - PullRequest
0 голосов
/ 06 июня 2010

Моя база данных имеет около 30 просмотров, большинство из которых имеют ссылку на другую базу данных на этом сервере (назовите ее DB1).

Теперь, не вдаваясь в причины, мне нужно обновить все эти представления до DB2, также на локальном сервере.

Я бы не хотел делать это вручную при каждом просмотре. Могу ли я выполнить какой-нибудь SQL-запрос, который заменит все вхождения строки 'DB1' на 'DB2' во всех моих представлениях?

Ответы [ 2 ]

5 голосов
/ 06 июня 2010

Вы можете запросить sys.sql_modules следующим образом, который я бы использовал для генерации файла через bcp (SSMS будет усекать результаты), который можно запустить как другой сценарий SQL. Это также сохраняет права доступа.

Я использовал эту технику и раньше, и она работает.

SELECT
    REPLACE (REPLACE (sm.definition, 'CREATE VIEW', 'ALTER VIEW'), 'DB1.', 'DB2.') + '
    GO'
FROM
    sys.sql_modules sm
    JOIN
    sys.objects o ON sm.object_id = o.object_id
WHERE
    sm.definition LIKE '%DB1.%' AND o.type = 'V'
4 голосов
/ 06 июня 2010

перейдите к папке представлений, нажмите F7 (Object Explorer Details), теперь на правой панели выберите все представления, которые вы хотите, щелкните правой кнопкой мыши -> представление сценария как -> DROP and CREATE TO -> новое окно запроса. Там поменяй DB1 на DB2 и вуаля

см. Изображение alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...