从T-SQL存储过程引用另一个数据库,而无需对数据库名称进行硬编码

问题描述 投票:2回答:2

示例代码引用来自另一个数据库的表,然后打开当前数据库。

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

问题:可以以某种方式对另一个数据库(“ DB2”)的名称进行软编码吗?

类似的东西(我知道这行不通,但也许会使我的问题更清楚)

use DB1
varchar @OtherDB
set @OtherDB = "DB2"
select * from SomeTableInDB1
select * from @OtherDB..SomeTableInDB2
sql-server sql-server-2005 tsql
2个回答
8
投票

您还可以使用一个同义词,我发现它比视图要干净一些(view shouldn't have SELECT *,但随着基础表的更改也需要维护)。

SELECT *

这实际上只是一个重定向-基表中的索引仍然以相同的方式使用,等等。所以现在在DB1中,您可以说:

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

...无需对数据库进行硬编码。

有关更多信息,请参见SELECT * FROM dbo.SomeTableInDB2;


2
投票

您可以使用接口视图,因此只需要在一个地方更改数据库名称:

CREATE SYNONYM (MSDN)

另一个选项是动态SQL:

CREATE SYNONYM
© www.soinside.com 2019 - 2024. All rights reserved.