2013-11-06 6 views
0

У меня есть база данных с хранимыми процедурами, выбирающие данными из другой базы данныхимени базы данных в качестве переменных

select * from Users in AnotherDatabase.dbo.Users 

У меня есть несколько версий другой базы данных, т.е.

AnotherDatabaseProduction, AnotherDatabaseDevelopment, AnotherDatabaseStage 

Я помню, в то время как что я создал какую-то глобальную переменную типа AnotherDatabase_Pointer, которую я мог бы установить, выполнив некоторую хранимую процедуру, такую ​​как SetAnotherDatabaseToStage:

AnotherDatabase_Pointer = 'AnotherDatabaseStage' //pseudo-code 

Что я мог бы использовать в своих хранимых процедурах.

Но я не могу вспомнить, как это было сделано. Все, что я могу найти, как сделать это с помощью строки замены/конкатенации:. variable database name :(

Возможно ли это MS SQL

ответ

5

Вы, вероятно, думаете о Synonym

CREATE SYNONYM dbo.whatever FOR dbname.dbo.procedure_name; 

Теперь. если вы хотите поменять его на какую-либо другую базу данных, просто снимите и заново создайте синоним:

DROP SYNONYM dbo.whatever; 
GO 
CREATE SYNONYM dbo.whatever FOR other_dbname.dbo.procedure_name; 
+0

+1, но я не думаю, что это обязательно лучше, чем динамический SQL решение, и если вы хотите, чтобы он удалялся и создавал синоним «на лету» из переменной, вам все равно нужно использовать динамический SQL для создания синонима. Я думаю, что короткий ответ (на мой взгляд) заключается в том, что если динамическое решение SQL не будет работать, вы не сможете использовать переменную для указания базы данных. –

+2

@ Love2Подтвердите, что код хранимой процедуры может оставаться идентичным во всех трех базах данных и отличается только синонимом. Это намного мощнее (и безопасно!), Чем использование динамического SQL. Также не похоже, что они хотят постоянно менять это на лету (но, возможно, я не читаю его правильно). –

+0

Я знаю, что вы говорите, и я не согласен с логикой с точки зрения архитектуры, но я думаю, что OP говорит, что у них есть хранимая процедура в одной базе данных, и они хотят иметь возможность передавать переменную с именем целевой базы данных в хранимую процедуру и запросить данные из одинаковых названных таблиц в разных базах данных на основе переменной. (Я тоже не мог прочитать это неправильно.) –

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