在不同环境中使用不同DB名称的跨数据库查询?

时间:2008-11-24 16:31:09

标签: sql sql-server database sql-server-2005

您将如何处理不同环境中的跨数据库查询。例如,db1-development和db2-development,db1-production和db2-production。

如果我想在开发中从db2到db1进行跨数据库查询,我可以使用完全限定名称[db1-development]。[schema]。[table]。但是如何在不同环境之间维护查询和存储过程? [db1-development]。[schema]。[table]在生产中不起作用,因为数据库名称不同。

我可以看到搜索和替换作为一种可能的解决方案,但我希望有一种更优雅的方法来解决这个问题。如果有特定于db的解决方案,我使用的是SQL Server 2005。

2 个答案:

答案 0 :(得分:7)

为什么dev和prod之间的数据库名称不同?显然,如果它们是相同的话,这是最容易的。

如果它是共享的单个表,那么您可以在其上创建一个视图 - 这只需要在转移到生产时更改该视图。

否则,您需要create a SYNONYM来获取对象,并确保始终引用它。你仍然需要更改SYNONYM创建脚本,但我认为这可以很容易地在构建脚本中完成。

答案 1 :(得分:0)

因此,为开发和生产数据库使用不同的名称是不切实际的。在开发,生产和可选的验收/ Q& A环境中使用相同的数据库名称,使您的SQL代码更易于维护。

但是,如果你真的需要,你可以通过视图和动态SQL获得创意。例如,您将实际数据检索查询放在视图中,然后选择如下:

declare @environment varchar(10)
set @environment = 'db-dev' -- input parameter, comes from app layer

declare @sql varchar(8000)
set @sql = 'select * from ' + @environment + '.dbo.view'
execute(@sql)

但它远非漂亮......