我的生产和开发(以及质量检查)数据库都有不同的名称。该应用程序使用视图来引用其他数据库中的表。我不想在每个源代码(开发,质量保证,生产)的源代码管理中使用单独的脚本,而是想创建一个“主”脚本(视图或函数?),该脚本将在所有脚本上运行,但将根据位置选择适当的数据库当前数据库)。
就像是:
CASE db_name()
WHEN 'dev' THEN (SELECT a,b... FROM DEVSERVER.DEVOTHERDB.dbo.mytable)
WHEN 'prod' THEN (SELECT a,b... FROM PRODSERVER.PRODOTHERDB.dbo.mytable)
...
有任何想法吗?
大致来说,您要做的第一件事是
If Object_Id('dbo.CreateSynonym') Is Not Null Drop Procedure dbo.CreateSynonym
Go
Create Procedure dbo.CreateSynonym
@TableName SysName
As
Begin
Declare @Sql NVarchar(Max) = 'If Exists(Select * From sys.synonyms where name = ''' + @TableName + ''''
Exec (@Sql)
Set @Sql = 'Create Synonym dbo.' + @TableName + ' For ' +
Case When Db_Name() = 'dev' Then 'devserver.devdb'
When Db_Name() = 'prod' Then 'prodserver.proddb' End + '.dbo.' + @TableName
Exec (@Sql)
End
Go
Exec dbo.CreateSynonym 'mytable'
Exec dbo.CreateSynonym 'myothertable'
...
...
Go
(从我的头顶可能会有疣)从那时起,您只需参考即可dbo.MyTable
。
感谢您的见解。