温馨提示:本文翻译自stackoverflow.com,查看原文请点击:sql server - SQL View / Function Select statement changes based on Database Connection
sql-server

sql server - SQL视图/函数选择语句基于数据库连接的更改

发布于 2020-03-27 10:55:52

我的生产和开发(以及质量检查)数据库都有不同的名称。该应用程序使用视图来引用其他数据库中的表。我不想在每个源代码(开发,质量保证,生产)的源代码管理中使用单独的脚本,而是想创建一个“主”脚本(视图或函数?),该脚本将在所有脚本上运行,但将根据位置选择适当的数据库当前数据库)。

就像是:

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)
...

有任何想法吗?

查看更多

查看更多

提问者
Matt Balent
被浏览
111
Stu 2019-07-03 22:05

大致来说,您要做的第一件事是

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