创建链接服务器(SQL Server 数据库引擎)

通过创建链接服务器,您可以使用来自多个数据源的数据。该链接服务器不必是其他 SQL Server 实例,尽管这种情况很常见。本主题说明如何创建链接服务器和访问来自其他 SQL Server 的数据。

主题内容

  • 开始之前:

    背景

    安全性

  • 示例:

    SQL Server Management Studio

    Transact-SQL

  • **跟进:**在创建链接服务器后采取的步骤

背景

链接服务器让用户可以对 OLE DB 数据源进行分布式异类查询。在创建某一链接服务器后,可对该服务器运行分布式查询,并且查询可以联接来自多个数据源的表。如果链接服务器定义为 SQL Server 实例,则可执行远程存储过程。

链接服务器的功能和必需的参数可能会有很大差异。本主题中的示例是典型示例,但并未描述所有选项。有关详细信息,请参阅 sp_addlinkedserver (Transact-SQL)

安全性

权限

要求具有对服务器的 ALTER ANY LINKED SERVER 权限。

[返回页首]

如何创建链接服务器

您可以使用以下任意一项:

  • SQL Server Management Studio

  • Transact-SQL

使用 SQL Server Management Studio

使用 SQL Server Management Studio 创建与其他 SQL Server 实例的链接服务器

  1. 在 SQL Server Management Studio 中,打开对象资源管理器,展开**“服务器对象”,右键单击“链接服务器”,然后单击“新建链接服务器”**。

  2. 在**“常规”页上的“链接服务器”**框中,键入您链接到的 SQL Server 实例的名称。

    注意注意

    如果该 SQL Server 实例是默认实例,则输入承载 SQL Server 实例的计算机的名称。如果该 SQL Server 是命名实例,则输入计算机名称和实例名称,例如 Accounting\SQLExpress。

  3. 在**“服务器类型”**区域中,选择 SQL Server 以便指示该链接服务器是 SQL Server 的另一个实例。

  4. 在**“安全性”页上,指定在原始 SQL Server 连接到链接服务器时将使用的安全上下文。在通过使用其域登录名连接用户的域环境中,选择“使用登录名的当前安全上下文建立连接”通常是最佳选择。在用户通过使用 SQL Server 登录名连接到原始 SQL Server 时,最佳选择通常是选择“通过使用此安全上下文”**,然后提供在链接服务器上进行身份验证时所必需的凭据。

  5. 单击“确定”。

[返回页首]

使用 Transact-SQL

若要通过使用 Transact-SQL 创建链接服务器,请使用 sp_addlinkedserver (Transact-SQL)CREATE LOGIN (Transact-SQL)sp_addlinkedsrvlogin (Transact-SQL) 语句。

使用 Transact-SQL 创建与其他 SQL Server 实例的链接服务器

  1. 在查询编辑器中,输入以下 Transact-SQL 命令以便链接到名为 SRVR002\ACCTG 的 SQL Server 实例:

    USE [master]
    GO
    EXEC master.dbo.sp_addlinkedserver 
        @server = N'SRVR002\ACCTG', 
        @srvproduct=N'SQL Server' ;
    GO
    
  2. 执行以下代码,以便将链接服务器配置为使用正在使用链接服务器的登录名的域凭据。

    EXEC master.dbo.sp_addlinkedsrvlogin 
        @rmtsrvname = N'SRVR002\ACCTG', 
        @locallogin = NULL , 
        @useself = N'True' ;
    GO
    

[返回页首]

跟进:在创建链接服务器后采取的步骤

测试链接服务器

  • 执行下面的代码,测试与链接服务器的连接。以下示例返回链接服务器上数据库的名称。

    SELECT name FROM [SRVR002\ACCTG].master.sys.sysdatabases ;
    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,则意味着该登录名在链接服务器上不存在。这些登录名将无法使用链接服务器,除非链接服务器配置为传递不同的安全上下文或者链接服务器接受匿名连接。

[返回页首]