Изменение имен базы данных и кросс-запросов базы данных в хранимых процедурах - PullRequest
6 голосов
/ 26 мая 2010

У меня есть несколько связанных баз данных, которые имеют версию. Экземпляры разных версий могут работать бок о бок, что определяется их разными версиями, то есть [NorhwindV1.1] и [NorhwindV1.2] могут находиться на одном сервере вместе с [SouthwindV1.1] и [SouthwindV1.2].

Существует несколько хранимых процедур, которые выполняют запросы к нескольким базам данных, то есть существуют в NorthwindV1.1, а также таблицы запросов в SouthwindV1.1. Каков наилучший способ управления изменениями в именах баз данных с изменением номера версии, чтобы хранимые процедуры запрашивали правильную версию баз данных?

Спасибо, MagicAndi.

Ответы [ 3 ]

5 голосов
/ 26 мая 2010

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

http://msdn.microsoft.com/en-us/library/ms177544.aspx

2 голосов
/ 26 мая 2010

Есть только два способа, о которых я знаю, и оба типа отстой. Во-первых, использовать динамический SQL, например:

declare @db varchar(512)
set @db = 'NorthwindV1.1'

declare @sql varchar(max)
set @sql = 'select * from ' + @db + '.dbo.YourTable'
exec (@sql)

Второй - установить несколько экземпляров SQL Server на компьютере. Как localhost\v1.0, localhost\v1.1 и так далее. Затем вы можете создать связанный сервер, который вы запрашиваете, как:

select * from linkedserver.northwind.dbo.YourTable

Теперь вы можете изменить связанный сервер так, чтобы он указывал на один из localhost\v1.0, localhost\v1.1, и хранимые процедуры будут следовать.

Я буду наблюдать за этим вопросом, чтобы увидеть, появятся ли лучшие предложения :)

1 голос
/ 26 мая 2010

Вы можете создать представления в каждой базе данных для других необходимых таблиц. Хранимые процедуры будут ссылаться на представления, а представления будут указывать на «правильную» базу данных.

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

...