TSQL:是否可以根据环境引用不同的数据库?

TSQL:是否可以根据环境引用不同的数据库?,tsql,stored-procedures,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,

因此,我们有两个不同的数据库,存储过程需要引用另一个数据库来获取信息。我们通常会这样编写查询

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中存储的过程将引用开发人员的数据库

因此,我的问题是如何更改基于环境变量访问的数据库?我已经开始为此使用DynSQL,但这会导致维护代码更加困难

也许有一种方法来创建一个“数据库别名”,它是数据库范围的?

,您可以考虑为此使用。在您的情况下,只需创建一个引用其他数据库表的同义词,例如:

为Mercury.dbo.MyTable创建同义词MyTable


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

也许这些差异应该通过生成部署脚本来处理,而不是让相同的代码在不同的环境中执行不同的操作。这是我正在考虑的一个选项。但是代码并没有做“不同的事情”,它只是引用了不同的数据库。您是否考虑过使用一致的数据库名称,但如果使用SQL Server,则使用多个实例,而不是使用不同的数据库名称来表示每个环境?即使只有一台机器可用,只要创建命名实例,这仍然有效。@MichaelFredrickson我会研究这个想法。我不明白为什么我们不能这样做,但我不负责这方面的工作。你也可以在QA服务器上创建Mercury和PurchasingQA作为新数据库,这些数据库只有指向MercuryQA和PurchasingQA数据库表的视图。这允许代码继续工作,但不强制使用新的数据库名称。在未来,我们将为DEV/QA/Staging提供单独的服务器。。。所以这不应该是个问题。