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

Sql 在不同环境中使用不同数据库名称的跨数据库查询?,sql,sql-server,database,sql-server-2005,Sql,Sql Server,Database,Sql Server 2005,您将如何处理不同环境中的跨数据库查询。例如,db1开发和db2开发、db1生产和db2生产 如果我想在从db2到db1的开发中执行跨数据库查询,我可以使用完全限定名[db1 development].[schema].[table]。但是如何在不同的环境之间维护查询和存储过程呢?[db1开发].[schema].[table]在生产环境中不起作用,因为数据库名称不同 我认为搜索和替换是一种可能的解决方案,但我希望有一种更优雅的方法来解决这个问题。如果有特定于数据库的解决方案,我使用的是SQL S

您将如何处理不同环境中的跨数据库查询。例如,db1开发和db2开发、db1生产和db2生产

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


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

为什么dev和prod之间的数据库名称不同?很明显,如果它们是一样的,那就很容易了

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


否则,您将需要为对象创建一个对象,并确保始终引用该对象。您仍然需要更改同义词创建脚本,但我认为这可以在构建脚本中轻松完成。

为什么dev和prod之间的数据库名称不同?很明显,如果它们是一样的,那就很容易了

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


否则,您将需要为对象创建一个对象,并确保始终引用该对象。您仍然需要更改同义词创建脚本,但我认为这可以在构建脚本中相当容易地完成。

因此,在开发和生产数据库中使用不同的名称是不切实际的。在开发、生产和验收/Q&A环境中使用相同的db名称,可以使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)

但它远不是很漂亮…

因此,在开发和生产数据库中使用不同的名称是不现实的。在开发、生产和验收/Q&A环境中使用相同的db名称,可以使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)

但这远远不够漂亮…

+1表示创建同义词。我以前不知道这些…:-)+1表示创建同义词。我以前不知道这些…:-)