2016-11-22 2 views
3

Мне было интересно, как лучше всего было бы запрашивать несколько баз данных в хранимой процедуре. Я могу жестко закодировать имена баз данных в хранимой процедуре т.е.:Каков наилучший способ запроса нескольких баз данных в хранимых процедурах в разных средах?

Select * 
from [Audit].[dbo].[AuditTable] inner join 
    [Core].[dbo].[CoreTable] 
    on .... 

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

Возможные решения:

  • Использование представления для таблиц в охватить различными базами данных? Имя базы данных будет существовать только в одном месте
  • Расширенные свойства для базы данных/передача имени в хранимую процедуру . Возможно динамическое изменение имени базы данных , используемой в хранимой процедуре: Changing database name in a stored procedure dynamically Но я беспокоюсь, что это будет беспорядочно
  • Отдельные среды с одинаковым именем базы данных на всех окружениях ?

Кажется, что это дубликат: Cross-database queries with different DB names in different environments

+0

Что вы провели до сих пор? Можете ли вы предоставить ссылки, чтобы показать, что вы исследовали, и указать, как каждый не поможет вам найти ответ? –

ответ

0

Отдельных сред с тем же именем базы данных по все средам кажется, чистейшем вариантом.

Но если это не вариант, возможно, переменные замещения могут работать. Инструменты данных SQL Server для Visual Studio обрабатывают его таким образом - ссылочная база данных ссылается на использование маркера, например. [Аудит] будет заменен на [$ (Аудит)]. Затем, когда вы публикуете базу данных, вы определяете значение для каждой переменной $, и эти значения заменяются вместо токенов.

Очевидно, это потребует от вас механизма для этих замен.

Смежные вопросы