У меня есть много связанных баз данных, которые являются имеющими версию. Экземпляр различных версий может работать рядом, определенный их различными версиями, т.е. [NorhwindV1.1] и [NorhwindV1.2] может быть на том же сервере, наряду с [SouthwindV1.1] и [SouthwindV1.2].
Существует много хранимых процедур, которые раздражают запросы базы данных, т.е. существуют на NorthwindV1.1 и также таблицах запроса в SouthwindV1.1. Что лучший способ состоит в том, чтобы управлять изменением на имена базы данных с изменением номера версии, так, чтобы хранимые процедуры запросили правильную версию баз данных?
Спасибо, MagicAndi.
Предполагая, что количество таблиц, запрашиваемых между базами данных, управляемо, вы можете создать синонимы для этих таблиц и использовать синоним в процедурах. Тогда вам просто нужно будет изменить синонимы, чтобы переключаться между версиями.
Есть только два способа, о которых я знаю, и оба они отстойные. Первый - использовать динамический 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
Теперь вы можете изменить linkedserver, чтобы он указывал на один из localhost\v1.0
, localhost\v1.1
и хранимые процедуры будут следовать за ним.
Я буду следить за этим вопросом, чтобы увидеть, если появятся лучшие предложения :)
Вы можете создавать представления в каждой базе данных для других необходимых таблиц. Сохраненные процедуры будут ссылаться на представления, а представления будут указывать на «правильную» базу данных.
Возможно, вы даже можете создать простую хранимую процедуру TSQL для генерации представлений, когда их нужно переключить на новую базу данных.