Gre*_*icz 2 t-sql sql-server sql-server-2005
示例代码引用来自不同数据库的表,然后是当前的.
use DB1
select * from SomeTableInDB1
select * from DB2..SomeTableInDB2
Run Code Online (Sandbox Code Playgroud)
问题:其他数据库("DB2")的名称可以以某种方式进行软编码吗?
像这样的东西(我知道这不会起作用,但也许这会让我的问题更加清晰)
use DB1
varchar @OtherDB
set @OtherDB = "DB2"
select * from SomeTableInDB1
select * from @OtherDB..SomeTableInDB2
Run Code Online (Sandbox Code Playgroud)
您还可以使用同义词,我发现它比视图更清晰(视图不应该有,SELECT *
但也需要在基础表更改时进行维护).
USE DB1;
GO
CREATE SYNONYM dbo.SomeTableInDB2 FOR DB2.dbo.SomeTableInDB2;
Run Code Online (Sandbox Code Playgroud)
这实际上只是一个重定向 - 来自基表的索引仍以相同的方式使用等等.所以现在在DB1中你可以说:
SELECT * FROM dbo.SomeTableInDB2;
Run Code Online (Sandbox Code Playgroud)
...没有硬编码数据库.
有关更多信息,请参阅CREATE SYNONYM
(MSDN).