示例代码引用来自不同数据库的表,然后是当前的。
use DB1
select * from SomeTableInDB1
select * from DB2..SomeTableInDB2
问题:其他数据库(“DB2”)的名称能否以某种方式进行软编码?
这样的事情(我知道这不起作用,但也许这会让我的问题更清楚)
use DB1
varchar @OtherDB
set @OtherDB = "DB2"
select * from SomeTableInDB1
select * from @OtherDB..SomeTableInDB2
答案 0 :(得分:8)
您还可以使用同义词,我发现它比视图(view shouldn't have SELECT *
更干净,但在底层表更改时也需要维护。)
USE DB1;
GO
CREATE SYNONYM dbo.SomeTableInDB2 FOR DB2.dbo.SomeTableInDB2;
这实际上只是一个重定向 - 来自基表的索引仍以相同的方式使用等等。所以现在在DB1中你可以说:
SELECT * FROM dbo.SomeTableInDB2;
...没有对数据库进行硬编码。
有关详细信息,请参阅CREATE SYNONYM
(MSDN)。
答案 1 :(得分:2)
您可以使用界面视图,因此您只需在一个位置更改数据库名称:
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)