SQL Server链接数据库别名

Ben*_*Ben 10 sql sql-server

是否有可能不仅有LinkedServer,而是链接数据库和服务器?我的情况是有一个环境设置:

ServerX:DatabaseOne,DatabaseTwo

和另一个环境:

ServerY:MyDatabaseOne,MyDatabaseTwo

现在,DatabaseOne和MyDatabaseOne与DatabaseTwo和MyDatabaseTwo完全相同.我有一个存储过程,在给定的服务器上从一个数据库到另一个数据库执行一些基本的表更新,我希望它能够在两种环境中工作.我已经设置了一个链接服务器,所以我的参考可以是:

MyLinkedServer.DatabaseOne.dbo.MyTable或MyLinkedServer.MyDatabaseOne.dbo.MyTable

即便如此,我还需要在切换环境时更改数据库名称时更改SP,是否有任何设置数据库别名的方法,以便我可以编写:

SELECT*FROM MyLinkedServer.MyLinkedDatabase.dbo.MyTable

因此,只要在每个环境中设置了LinkedServer和(如果可能的话)LinkedDatabase,SP在切换环境时都可以正常工作而不会改变?

Bra*_*ath 20

您可以通过按照这些步骤对服务器进行别名来避免动态sql(对此帖子的信用)

1)第1步:

  • 在SQL Server Management Studio中打开"链接服务器",然后打开"新建链接服务器".
  • 在出现的向导内部 - 选择常规选项卡.
  • 在"链接服务器"字段中指定别名.
  • 选择SQL Native Client作为提供者.
  • 在"产品名称"字段中添加sql_server(这就是魔术).
  • 在"数据源"中 - 指定要用作链接服务器的主机的名称.

2)第2步:

  • 在Security选项卡中 - 指定适当的安全选项(例如安全上下文)

3)第3步:

  • 在"服务器选项"选项卡中 - 将"数据访问","RPC","RPC输出"和"使用远程排序规则"设置为true.

4)第4步:

  • 请享用

您可以更进一步,在查询表时跳过指定数据库名称,您可以为每个对象创建同义词,如下所示:

CREATE SYNONYM [dbo].[DimProduct]
FOR
[AdventureWorksDW].[dbo].[DimProduct]
Run Code Online (Sandbox Code Playgroud)

这将在您的数据库中创建DimProduct同义词.据我所知,您无法创建数据库的同义词.


Car*_*arl 4

我认为简短的答案是否定的。我认为尚不支持数据库别名。

动态 SQL 可以做到。您可以注入数据库名称等并执行查询。