SQL Server链接数据库别名

时间:2010-10-29 08:47:13

标签: 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在切换环境时都可以正常工作吗?

4 个答案:

答案 0 :(得分:20)

您可以通过按照以下步骤对信息进行别名来避免动态sql(信用到this post

1)第1步:

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

2)第2步:

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

3)第3步:

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

4)第4步:

  • 享受

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

CREATE SYNONYM [dbo].[DimProduct]
FOR
[AdventureWorksDW].[dbo].[DimProduct]

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

答案 1 :(得分:4)

我认为简短的回答是否定的。我不相信支持数据库别名。

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

答案 2 :(得分:4)

找到我的问题的答案。它比创建链接数据库稍微复杂一些,但同义词就是答案。

http://msdn.microsoft.com/en-us/library/ms190626.aspx

答案 3 :(得分:1)

我知道,这是一个老问题,但(至少在SQL 2014中,但我猜在旧版本中)你可以设置一个带有“别名”和远程查询(OPENQUERY)的链接服务器数据库部分。

USE [master]
GO

EXEC master.dbo.sp_addlinkedserver @server = N'MyAliasServer', @srvproduct=N'SQLSERVER', 
             @provider=N'SQLNCLI', @datasrc=N'MyRealServer1', @catalog=N'database1'

当然,您也必须设置安全性等。之后你可以运行

SELECT * FROM OPENQUERY(MyAliasServer, 'select * from dbo.MyTbl')

未指定数据库名称(因为它已在链接服务器连接中定义)。

如果您将链接服务器(上下文菜单)编写成脚本并替换服务器名称/数据库名称,则只需删除当前服务器并创建另一个链接服务器即可在两台服务器之间进行切换。