• SQL Server访问远程数据库和Linked Server


    SQL Server连接远程数据源的基本方法有下面三种:
    OPENDATASOURCE: The OPENDATASOURCE function is used to specify connection information for a remote data source by specifying the OLE DB provider and an initialization string. OPENDATASOURCE can be used directly within a SELECT, INSERT, UPDATE, or DELETE statement.
     
    OPENROWSET: The OPENROWSET function is used to specify connection information for a remote data source and the name of an object that will return a result set (such as a stored procedure) or a query that will return a result set. Like OPENDATASOURCE, OPENROWSET can be used directly within a SELECT, INSERT, UPDATE, or DELETE statement.
     
    Linked servers: A linked server is an object within SQL Server that defines the connection properties of another SQL Server. When defined, queries can connect to the remote server using a four-part name, such as
    SQLSrv1.AdventureWorks.person.Contact
    The four-part name identifies the server (SQLSrv1), the database (AdventureWorks), the schema (Person), and the object (Contact table). Linked servers are explored in more depth in the final section of this chapter.
     
    其中OPENDATASOURCE和OPENROWSET方法一般用来做临时查询(ad hoc query),如果需要经常的查询远程数据,则建议创建linked servers。但是,默认情况ad hoc query 是禁用的,需要手动启动:
    sp_configure ‘show advanced options’, 1;
    GO
    RECONFIGURE;
    GO
    sp_configure ‘Ad hoc Distributed Queries’, 1;
    GO
    RECONFIGURE;
     
    然后,就可以使用OPENDATASOURCE 查询远程数据库了,OPENDATASOURCE 基本语法如下:OPENDATASOURCE ( provider_name, init_string )。示例代码如下:
    SELECT *
    FROM OPENDATASOURCE(‘SQLNCLI’,
    ‘Data Source=SQL08;Integrated Security=SSPI’)
    .Sales.dbo.Customers
    上述代码从SQL08服务器上读取Sales数据库的Customers表的内容。
     
    也可以通过OPENROWSET方法查询远程数据库,OPENROWSET和OPENDATASOURCE方法相似,基本的差异是OPENROWSET总是返回结果集,而OPENDATASOURCE方法除了可以返回结果集(Result Set)外,也可以用来执行存储过程。
    OPENROWSET 基本语法如下:
    OPENROWSET ( provider_name, provider_string )
    示例代码:
    SELECT rs.*
    FROM OPENROWSET(‘SQLNCLI’,
    ‘Server=SQL08;Trusted_Connection=yes;’,
    ‘SELECT * FROM Sales.dbo.Customers’) AS rs;
     
    使用Linked Server
    如果你计划多次查询外部或远程数据源,建议创建linked server。尽管创建linked server需要一点时间,但是一旦创建后,你可以非常方便地使用four-part 名称来访问远程数据源。
     
    创建和配置linked server一般需要两步:
    第一步是创建linked server。
    可以通过sp_addlinkserver系统存储过程来创建linked server,基本语法如下:
    sp_addlinkedserver [ @server= ] ‘server’ [ , [@srvproduct= ] ‘product_name’ ]
    [ , [ @provider= ] ‘provider_name’ ]
    [ , [ @datasrc= ] ‘data_source’ ]
    [ , [ @location= ] ‘location’ ]
    [ , [ @provstr= ] ‘provider_string’ ]
    [ , [ @catalog= ] ‘catalog’ ]
     
    示例脚本如下所示:
    EXEC sp_addlinkedserver @server = 'SQLSRV3', @srvProduct = N'SQL Server'
     
    也可以通过SQL Server的管理界面,来创建linked server,如下图所示:
     

     
    右键点击上述节点,选择“新建链接服务器…”,在弹出的窗口,就可以创建linked server了。
     
    第二步是创建linked server的登录帐号。
    在linked server创建后,下一步是创建远程服务器的登录帐号。通过本地SQL Server的登录帐号来映射到linked server的登录帐号。
     

     
    创建linked server的登录帐号也有两种方法,一种是通过系统存储过程 sp_addlinkedsrvlogin,sp_addlinkedsrvlogin的基本语法如下:
    sp_addlinkedsrvlogin [ @rmtsrvname = ] ‘rmtsrvname’
    [ , [ @useself = ] ‘TRUE’ | ‘FALSE’ | ‘NULL’]
    [ , [ @locallogin = ] ‘locallogin’ ]
    [ , [ @rmtuser = ] ‘rmtuser’ ]
    [ , [ @rmtpassword = ] ‘rmtpassword’ ]
     
    sp_addlinkedsrvlogin创建远程服务器登录帐号示例脚本如下:
    EXEC sp_addlinkedsrvlogin @rmtsrvname=N'SQLSRV3', @useself=N'False', @locallogin=N'sa', @rmtuser=N'remoteuser', @rmtpassword='passowrd'
     
    当然也可以通过SQL Server管理界面来设置登录帐号,如下图所示:
     
     
  • 相关阅读:
    Python函数式编程学习笔记
    DOS常用命令总结
    Python高级特性学习笔记
    Git bash使用中...
    《零基础入门学习Python》学习过程笔记【30模块中的函数,os模块,ospath模块中的函数(看了一点)】
    这两天将这段时间的python笔记常用知识复习了一遍...前天半夜吃了盘烤羊肉..得了急性肠炎
    《零基础入门学习Python》学习过程笔记【29对文件进行分割】(没看)
    《零基础入门学习Python》学习过程笔记【28文件】
    《零基础入门学习Python》学习过程笔记【27集合】
    用python写一个简单的用户登陆程序(要求写成函数)
  • 原文地址:https://www.cnblogs.com/haoliansheng/p/1519217.html
Copyright © 2020-2023  润新知