Кросс-запросы к базе данных с разными именами БД в разных средах? - PullRequest
1 голос
/ 24 ноября 2008

Как бы вы обрабатывали запросы к нескольким базам данных в разных средах. Например, db1-development и db2-development, db1-production и db2-production.

Если я хочу сделать запрос к базе данных при разработке от db2 до db1, я мог бы использовать полное имя, [db1-development]. [Schema]. [Table]. Но как мне поддерживать запросы и хранимые процедуры между различными средами? [db1-development]. [схема]. [таблица] не будет работать в рабочей среде, поскольку имена баз данных отличаются.

Я вижу поиск и замену как возможное решение, но я надеюсь, что есть более элегантный способ решить эту проблему. Если есть конкретные решения для БД, я использую SQL Server 2005.

Ответы [ 2 ]

7 голосов
/ 24 ноября 2008

Почему имена баз данных отличаются между dev и prod? Очевидно, было бы проще, если бы они были одинаковыми.

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

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

0 голосов
/ 24 ноября 2008

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

Однако, если вам действительно нужно, вы можете проявить креативность с помощью представлений и динамического SQL. Например, вы помещаете фактический запрос поиска данных в представление, а затем выбираете так:

declare @environment varchar(10)
set @environment = 'db-dev' -- input parameter, comes from app layer

declare @sql varchar(8000)
set @sql = 'select * from ' + @environment + '.dbo.view'
execute(@sql)

Но это далеко не красиво ...

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