Динамический экземпляр базы данных в запросе - PullRequest
0 голосов
/ 13 декабря 2011

Хорошо. У меня есть база данных, которая имеет кучу хранимых процедур и ссылается на другую базу данных, например:

select * from DatabaseName.dbo.tableName... or
Insert into DatabaseName.dbo.tableName....

Итак. Он ссылается на это около 500-1000 раз в хранимых процедурах. Теперь происходит то, что мне нужно запустить эти хранимые процедуры из одной базы данных, ссылающейся на другую базу данных, например:

 select * from AnotherDatabaseName.dbo.tableName... or
 Insert into AnotherDatabaseName.dbo.tableName....

Насколько я понимаю, в sql server 2008 r2 нет ничего нового, что могло бы помочь, и мне приходится каждый раз создавать динамические запросы с параметром, верно? Если это так, есть ли приличный простой способ сделать это? Мне нужно изменить каждую хранимую процедуру и добавить параметр @DatabaseInstance. Также мне нужно перенастроить все запросы. звучит страшно. Какой-нибудь автоматизированный инструмент или что-то, чтобы помочь с этим?

1 Ответ

1 голос
/ 13 декабря 2011

Используя код, вы можете создать синоним для базы данных в вашей БД.Т.е. я использую этот код в SP для вставки в указанную базу данных на основе параметра (регион)

IF  EXISTS (SELECT * FROM sys.synonyms WHERE name = N'TABLE_SYNONYM') DROP SYNONYM [dbo].[TABLE_SYNONYM]
IF @region_id not in (2,3) CREATE SYNONYM [dbo].[TABLE_SYNONYM] FOR [DB_US].[dbo].[mytable]
IF @region_id = 2 CREATE SYNONYM [dbo].[TABLE_SYNONYM] FOR [DB_EU].[dbo].[mytable]
IF @region_id = 3 CREATE SYNONYM [dbo].[TABLE_SYNONYM] FOR [DB_Asia].[dbo].[mytable]

insert into [dbo].[TABLE_SYNONYM] (...) select ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...