У меня есть база данных с хранимыми процедурами, выбирающие данными из другой базы данныхимени базы данных в качестве переменных
select * from Users in AnotherDatabase.dbo.Users
У меня есть несколько версий другой базы данных, т.е.
AnotherDatabaseProduction, AnotherDatabaseDevelopment, AnotherDatabaseStage
Я помню, в то время как что я создал какую-то глобальную переменную типа AnotherDatabase_Pointer
, которую я мог бы установить, выполнив некоторую хранимую процедуру, такую как SetAnotherDatabaseToStage
:
AnotherDatabase_Pointer = 'AnotherDatabaseStage' //pseudo-code
Что я мог бы использовать в своих хранимых процедурах.
Но я не могу вспомнить, как это было сделано. Все, что я могу найти, как сделать это с помощью строки замены/конкатенации:. variable database name :(
Возможно ли это MS SQL
+1, но я не думаю, что это обязательно лучше, чем динамический SQL решение, и если вы хотите, чтобы он удалялся и создавал синоним «на лету» из переменной, вам все равно нужно использовать динамический SQL для создания синонима. Я думаю, что короткий ответ (на мой взгляд) заключается в том, что если динамическое решение SQL не будет работать, вы не сможете использовать переменную для указания базы данных. –
@ Love2Подтвердите, что код хранимой процедуры может оставаться идентичным во всех трех базах данных и отличается только синонимом. Это намного мощнее (и безопасно!), Чем использование динамического SQL. Также не похоже, что они хотят постоянно менять это на лету (но, возможно, я не читаю его правильно). –
Я знаю, что вы говорите, и я не согласен с логикой с точки зрения архитектуры, но я думаю, что OP говорит, что у них есть хранимая процедура в одной базе данных, и они хотят иметь возможность передавать переменную с именем целевой базы данных в хранимую процедуру и запросить данные из одинаковых названных таблиц в разных базах данных на основе переменной. (Я тоже не мог прочитать это неправильно.) –