zoukankan      html  css  js  c++  java
  • SQLSERVER调用OPENROWSET的方法

    前言:正好这两天在同步生产环境的某张表数据到测试环境,之前用过一些同步数据软件,感觉不太可靠,有时候稍有操作不当,就会出现生产环境数据被清空等情况,还要去恢复数据。如果能恢复还好,不能恢复那么......想想就觉得阔怕,后来想起 SQLSERVEROPENROWSET 函数可以通过 T-SQL 访问远程数据库,正好可以使用,看得见的SQL 比 同步数据软件看起来安心多了,哈哈.... 不讲废话了

    一、OPENROWSET

      简介:包含访问 OLE DB 数据源中的远程数据所需的所有连接信息。 当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的临时方法。 对于较频繁引用 OLE DB 数据源的情况,请改为使用链接服务器。 OPENROWSET 函数可以在查询的 FROM 子句中引用,就好象它是一个表名。 依据 OLE DB 提供程序的功能,还可以将 OPENROWSET 函数引用为 INSERTUPDATE 或 DELETE 语句的目标表。 尽管查询可能返回多个结果集,但 OPENROWSET 只返回第一个结果集。

    1. 语法详解

    OPENROWSET   
    ( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password'   
       | 'provider_string' }   
       , {   [ catalog. ] [ schema. ] object   
           | 'query'   
         }   
    } )   
      

    provider_name:字符串,表示在注册表中指定的 OLE DB 访问接口的友好名称)。 provider_name 没有默认值 

    datasource:对应于特定 OLE DB 数据源的字符串常量。 datasource 是要传递给提供程序的 IDBProperties 接口的 DBPROP_INIT_DATASOURCE 属性,该属性用于初始化提供

           程序 。 通常,此字符串包含数据库文件的名称、数据库服务器的名称,或者访问接口能理解的用于定位数据库的名称。

    user_id:字符串常量,它是传递给指定 OLE DB 访问接口的用户名。 user_id 为连接指定安全上下文,并作为 DBPROP_AUTH_USERID 属性传入以初始化提供程序 。

    password:字符串常量,它是传递给 OLE DB 访问接口的用户密码。 在初始化提供程序时,password 作为 DBPROP_AUTH_PASSWORD 属性传入 。

    provider_string:访问接口特定的连接字符串,作为 DBPROP_INIT_PROVIDERSTRING 属性传入以初始化 OLE DB 访问接口。 provider_string 通常封装初始化提供程序所需的

            所有连接信息 。

    catalog:指定对象所在的目录或数据库的名称。

    schema:架构的名称或指定对象的对象所有者名称。

    object:架构的名称或指定对象的对象所有者名称。

    query:字符串常量,发送到访问接口并由访问接口执行。 SQL Server 的本地实例不处理该查询,但处理由访问接口返回的查询结果(传递查询)。 有些访问接口并不通过表名而

        是通过命令语言提供其表格格式数据,将传递查询用于这些访问接口是非常有用的。 只要查询提供程序支持 OLE DB Command 对象及其强制接口,那么在远程服务器上

        就支持传递查询。

    注:如果 OLE DB 提供程序在指定的数据源中支持多个目录和架构,那么就需要目录及架构名称。如果 OLE DB 提供程序并不支持目录和架构,那么可以省略 catalog 及 schema 的

      值。 如果提供程序只支持架构名,那么必须指定一个两部分名称,形式为 schema.object。如果提供程序只支持目录名,那么必须指定一个三部分名称

      ,形式为 catalog.schema.object。

      OPENROWSET 不接受参数变量。

    权限:OPENROWSET 权限由传递到 OLE DB 提供程序的用户名的权限确定。 

    2. 示例

    SELECT * FROM  OPENROWSET('SQLNCLI',
    'server=IP地址;uid=账号;pwd=密码;database=数据库名称',
    'SELECT * FROM _category');

    3. 错误描述

    OLE DB 错误:OLE DBODBC 错误

      发生这种问题是因为 SQL SERVER 只提供一组特定访问接口的进程内访问。SQLNCLI.1 是 SQL SERVER 的一个新的本机 OLE DB 访问接口,它具有访问权。但是 SQLNCLI.1 是特定于版本的 SQLNCLI 访问接口,他不在访问接口的列表中,因此 SQLNCI.1 没有访问权,尽管 SQLNCLISQLNCLI.1 完全相同(因为 SQLNCLI 指向 SQLNCI.1),但 SQL SERVER 并不能识别出它们是相同的,SQL SERVER 会阻止对 SQLNCI.1 的访问

      要解决此问题,请使用下列方法之一:

    • 在 OLE DB 连接字符串中使用 SQLNCLI 和 SQLOLEDB  代替 SQLNCLI.1
    • SQL SERVER 中,将  SQLNCLI.1 显示添加到具有进程内访问权的供应商列表中

      

  • 相关阅读:
    webdriver css选取器
    LoadRunner录制下载文件
    LoadRunner结果分析笔记
    LR数据收集分析 Analysis 笔记2。
    Analysis 图的设置与操作。
    LR数据收集分析 Analysis 笔记1。
    unittest学习
    LR几个常用函数
    WebService 测试,参数本身就是XML
    在FlashBulider上安装Android开发环境
  • 原文地址:https://www.cnblogs.com/JamelAr/p/11303882.html
Copyright © 2011-2022 走看看