Создать синоним для базы данных / Изменить представления БД указывают на - PullRequest
5 голосов
/ 28 ноября 2011

Я знаю, что базы данных не поддерживаются CREATE SYNONYM, но я стремлюсь добиться функциональности, которую это обеспечит.

У нас есть база данных A, которая содержит представления к таблицам в базе данных B.Проблема в том, что «База данных B» не всегда называется «База данных B».Мы используем проекты баз данных для развертываний, которые на данный момент сбрасываются с ошибкой «Invalid Object Name», если нет «Database B».

Обходной путь на данный момент - открыть .dbschemaфайл и сделать поиск и замену.Я предполагаю, что другим вариантом будет создание загрузки синонимов таблиц.

Каков наилучший способ изменения базы данных по количеству просмотров без изменения каждого вида отдельно?

Спасибо

Ответы [ 2 ]

5 голосов
/ 28 ноября 2011

Синонимы - хороший способ сделать это. Вы должны создать синонимы на уровне объекта (как вы обнаружили). Простой способ сделать это - написать скрипт, который будет проходить по списку таблиц в DatabaseB (из вашего примера) и создавать синоним для каждой из них в DatabaseA. Оставьте имя синонима таким, чтобы код в ваших представлениях не менялся. Например, если у вас есть базы данных tbl_a, tbl_b и tbl_c, вы хотите, чтобы ваш скрипт в конечном итоге делал следующее:

create synonym [otherDb].[tbl_a] for [DatabaseB].[schemaB].[tbl_a]
create synonym [otherDb].[tbl_b] for [DatabaseB].[schemaB].[tbl_b]
create synonym [otherDb].[tbl_c] for [DatabaseB].[schemaB].[tbl_c]

Теперь в вашем коде представления вы всегда будете использовать [otherDb]. [Tbl_a], [otherDb]. [Tbl_b] и [otherDb]. [Tbl_c]. Надеюсь, что это имеет смысл.

2 голосов
/ 28 ноября 2011

В прошлом году я помог моему нынешнему клиенту реализовать очень похожий дизайн. Мы написали набор функций и хранимых процедур, которые генерируют представления автоматически. Всякий раз, когда вам нужно изменить целевую базу данных, она генерирует код для удаления и воссоздания всех представлений.

Код не был слишком сложным. Он просто использует системные таблицы для генерации кода представления. Я также написал прототип Powershell, который использует SMO для того же. Ключ заключается в том, чтобы автоматизировать его до такой степени, что требуется один вызов, чтобы вы могли сделать это легко и точно.

Мы также включили таблицу исключений, которая использовала сопоставление шаблонов таблиц для исключения из генерации представления. Он включал в себя столбец схемы и столбец с именем таблицы, каждый из которых принимал шаблоны LIKE, поэтому вы можете поместить «my_schema» и «%», чтобы исключить все таблицы в схеме my_schema.

Одна главная хранимая процедура приняла имя целевой базы данных и сгенерировала бы весь сценарий. После того, как сценарий сгенерирован, вы можете запустить его в SSMS или автоматизировать эту часть.

Все это было бы еще проще, если бы вы просто хотели создать синонимы. Мы использовали представления, чтобы мы могли изменять списки столбцов и т. Д., Чтобы при необходимости база данных вида отличалась от целевой БД.

...