zoukankan      html  css  js  c++  java
  • 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管理界面来设置登录帐号,如下图所示:
     
     
  • 相关阅读:
    拓端tecdat|R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
    拓端tecdat|R语言资产配置策略量化模型:改进的移动平均线策略动态回测
    拓端tecdat|R语言量化:合成波动率指数移动平均策略分析标准普尔500波动率指数(VIX)
    拓端tecdat|Python中的多项式回归拟合非线性关系实例
    从集团管控到集团赋能
    性能之巅-优化你的程序
    3个小时,从学到做,我用低代码平台搭了一套管理系统
    Hadoop架构原理
    硬核操作系统讲解
    一文弄懂什么是DevOps
  • 原文地址:https://www.cnblogs.com/haoliansheng/p/1519217.html
Copyright © 2011-2022 走看看