Изменение имен базы данных и перекрестных запросов базы данных в хранимых процедурах

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

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

Спасибо, MagicAndi.

6
задан MagicAndi 26 May 2010 в 11:24
поделиться

3 ответа

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

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

5
ответ дан 16 December 2019 в 21:35
поделиться

Есть только два способа, о которых я знаю, и оба они отстойные. Первый - использовать динамический 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 и хранимые процедуры будут следовать за ним.

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

2
ответ дан 16 December 2019 в 21:35
поделиться

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

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

1
ответ дан 16 December 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: