Ссылка на другую базу данных из хранимого процесса T-SQL без жесткого кодирования имени базы данных - PullRequest
2 голосов
/ 10 марта 2012

Пример таблицы ссылок на код из другой базы данных, отличной от текущей.

use DB1
select * from SomeTableInDB1
select * from DB2..SomeTableInDB2

ВОПРОС: Может ли имя другой базы данных ("DB2") быть каким-либо образом мягко закодировано?

что-то вроде этого (я знаю, что это не сработает, но, возможно, это делает мойуточняющий вопрос)

use DB1
varchar @OtherDB
set @OtherDB = "DB2"
select * from SomeTableInDB1
select * from @OtherDB..SomeTableInDB2

Ответы [ 2 ]

8 голосов
/ 10 марта 2012

Вы также можете использовать синоним, который, как мне кажется, немного чище, чем представление (представление не должно иметь SELECT *, но его также необходимо поддерживать при изменении базовой таблицы).

USE DB1;
GO
CREATE SYNONYM dbo.SomeTableInDB2 FOR DB2.dbo.SomeTableInDB2;

Это фактически просто перенаправление - индексы из базовой таблицы по-прежнему используются одинаково и т. Д. Итак, теперь в DB1 вы можете сказать:

SELECT * FROM dbo.SomeTableInDB2;

... безжесткое кодирование базы данных.

Для получения дополнительной информации см. CREATE SYNONYM (MSDN) .

2 голосов
/ 10 марта 2012

Вы можете использовать представление интерфейса, поэтому вам нужно только изменить имя БД в одном месте:

create view vw_Db2If_SomeTable
as
select * from DB2.dbo.SomeTable

Другой вариант - динамический SQL:

declare @sql nvarchar(max)
set @sql = 'select * from ' + @OtherDB + '.dbo.SomeTable'
exec (@sql)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...