原文地址:http://technet.microsoft.com/zh-CN/library/ff772782
本主题说明如何通过使用 SQL Server Management Studio 或 Transact-SQL 创建链接服务器和访问来自其他 SQL Server 的数据。 通过创建链接服务器,您可以使用来自多个数据源的数据。 该链接服务器不必是其他 SQL Server 实例,尽管这种情况很常见。
本主题内容
-
开始之前:
-
示例:
-
跟进: 在创建链接服务器后采取的步骤
链接服务器让用户可以对 OLE DB 数据源进行分布式异类查询。 在创建某一链接服务器后,可对该服务器运行分布式查询,并且查询可以联接来自多个数据源的表。 如果链接服务器定义为 SQL Server 实例,则可执行远程存储过程。
链接服务器的功能和必需的参数可能会有很大差异。 本主题中的示例是典型示例,但并未描述所有选项。 有关详细信息,请参阅 sp_addlinkedserver (Transact-SQL)。
您可以使用以下任意一项:
使用 SQL Server Management Studio
使用 SQL Server Management Studio 创建与其他 SQL Server 实例的链接服务器
-
在 SQL Server Management Studio 中,打开对象资源管理器,展开“服务器对象”,右键单击“链接服务器”,然后单击“新建链接服务器”。
-
在“常规”页上的“链接服务器”框中,键入您链接到的 SQL Server 实例的名称。
若要测试能否连接到链接服务器,请在对象资源管理器中,右键单击链接服务器,然后单击“测试连接”。
注意 如果该 SQL Server 实例是默认实例,则输入承载 SQL Server 实例的计算机的名称。 如果该 SQL Server 是命名实例,则输入计算机名称和实例名称,例如 Accounting\SQLExpress。
-
在“服务器类型”区域中,选择 SQL Server 以便指示该链接服务器是 SQL Server 的另一个实例。
-
在“安全性”页上,指定在原始 SQL Server 连接到链接服务器时将使用的安全上下文。 在通过使用其域登录名连接用户的域环境中,选择“使用登录名的当前安全上下文建立连接”通常是最佳选择。 在用户通过使用 SQL Server 登录名连接到原始 SQL Server 时,最佳选择通常是选择“通过使用此安全上下文”,然后提供在链接服务器上进行身份验证时所必需的凭据。
-
或者,若要查看或指定服务器选项,请单击“服务器选项”页。
-
单击“确定”。
查看提供程序选项
-
若要查看提供程序提供的选项,请单击“提供程序选项”页。
每个访问接口的选项都各不相同。 例如,某些类型的数据提供索引,有些则没有提供。 使用此对话框可以帮助 SQL Server 理解访问接口的功能。 SQL Server 安装某些常用的数据访问接口,但在提供数据的产品发生更改时,SQL Server 安装的访问接口可能不支持所有最新的功能。 提供数据的产品功能的有关信息的最佳来源是针对该产品的文档。
使用 Transact-SQL
若要通过使用 Transact-SQL 创建链接服务器,请使用 sp_addlinkedserver (Transact-SQL)CREATE LOGIN (Transact-SQL) 和 sp_addlinkedsrvlogin (Transact-SQL) 语句。
使用 Transact-SQL 创建与其他 SQL Server 实例的链接服务器
-
在查询编辑器中,输入以下 Transact-SQL 命令以便链接到名为 SRVR002\ACCTG 的 SQL Server 实例:
USE [master] GO EXEC master.dbo.sp_addlinkedserver @server = N'SRVR002\ACCTG', @srvproduct=N'SQL Server' ; GO
-
执行以下代码,以便将链接服务器配置为使用正在使用链接服务器的登录名的域凭据。
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'SRVR002\ACCTG', @locallogin = NULL , @useself = N'True' ; GO
测试链接服务器
-
执行下面的代码,测试与链接服务器的连接。 以下示例返回链接服务器上数据库的名称。
SELECT name FROM [SRVR002\ACCTG].master.sys.databases ; GO
编写联接来自某一链接服务器的多个表的查询
-
使用由四部分组成的名称引用链接服务器上的对象。 执行以下代码,以便返回本地服务器上所有登录名的列表及其在链接服务器上的匹配登录名。
SELECT local.name AS LocalLogins, linked.name AS LinkedLogins FROM master.sys.server_principals AS local LEFT JOIN [SRVR002\ACCTG].master.sys.server_principals AS linked ON local.name = linked.name ; GO
如果为链接服务器登录名返回了 NULL,则意味着该登录名在链接服务器上不存在。 这些登录名将无法使用链接服务器,除非链接服务器配置为传递不同的安全上下文或者链接服务器接受匿名连接。
操作步骤:
(1)在本地服务器上面建立一个和远程连接服务器相同的账户(包括用户名和密码)(2)在“安全性”页中,在“本地服务器登录到远程服务器登录的映射”列表中添加一项;
(3)在“本地登录”列中,输入新建的和远程连接服务器相同的用户名,在“远程用户,远程密码”中输入远程服务器的“登录名,密码”;
(4)点击“确定”;