TSQL:可以引用不同的数据库,具体取决于环境?

时间:2012-10-09 18:09:55

标签: tsql stored-procedures

所以我们有这样的情况,我们有两个不同的数据库和存储过程需要引用其他数据库来获取信息。我们通常会将查询写成这样的

select * from Mercury.dbo.MyTable a join Purchasing.dbo.OtherTable b on a.a = b.a

在生产和我们的开发环境中,这对我们来说很好,但最近我们将开发分为Dev / QA / ST,我们有不同版本的数据库来匹配环境。

Example
Purchasing, PurchasingQA, PurchasingST
Mercury, MercuryQA, MercuryST

所以现在我们在推广代码时遇到了问题,因为QA中存储的proc会引用dev的数据库。

所以我的问题是如何根据环境变量更改正在访问的数据库?我已经开始使用DynSQL,但这会导致很难维护代码。

也许有办法创建一个数据库范围的“数据库别名”?

1 个答案:

答案 0 :(得分:4)

您可以考虑将synonyms用于此目的。在您的情况下,只需创建引用其他数据库表的同义词,例如:

为Mercury.dbo.MyTable创建SYNONYM MyTable

每个数据库都有自己的同义词,但其余的脚本和存储过程都是相同的。