设为首页 收藏本站
查看: 734|回复: 0

[经验分享] SQL的OPENROWSET开启和使用方法

[复制链接]

尚未签到

发表于 2017-7-14 17:49:08 | 显示全部楼层 |阅读模式
[转载]SQL的OPENROWSET开启和使用方法


  1、开始 —>
  所有程序  —>
  Microsoft SQL Server 2005  —>
  配置工具  —>
  SQL Server外围应用配置器  —>
  功能的外围应用配置器  —>
  实例名  —>
  Database Engine  —>
  即席远程查询  —>
  启用OpenRowset和OpenDatasource支持。
  2.代码启用
  启用:
  exec sp_configure 'show advanced options',1
  reconfigure
  exec sp_configure 'Ad Hoc Distributed Queries',1
  reconfigure
  关闭:
  exec sp_configure 'Ad Hoc Distributed Queries',0
  reconfigure
  exec sp_configure 'show advanced options',0
  reconfigure
  在不启用OpenRowset/OpenDatasource时使用如下语句:
  INSERT INTO User_0502_tbl (BGQX )  SELECT ArID FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0','Data source=''D:\delphi\Test\Database.mdb'';User ID=Admin;Password=')...AFiles_tbl  这个语句是从access导入数据到SQL2005数据表
  你将看到“
  SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"  ”错误提升信息。
  OPENROWSET
  包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,然而 OPENROWSET 只返回第一个。
  语法
  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'
  是字符串常量,发送到提供程序并由提供程序执行。Microsoft® SQL Server™ 不处理该查询,但处理由提供程序返回的查询结果(直接传递查询)。对于有些提供程序,它们并没有通过表名而是通过命令语言表现自己的表格格式数据,那么将直接传递查询用于这些提供程序是非常有用的。只要查询提供程序支持 OLE DB Command 对象及其强制接口,那么在远程服务器上就支持直接传递查询。有关更多信息,请参见 SQL Server OLE DB 程序员参考。
  注释
  如果 OLE DB 提供程序在指定的数据源中支持多个目录和架构,那么就需要目录及架构名称。如果 OLE DB 提供程序并不支持目录和架构,那么可以省略 catalog 及 schema 的值。
  如果提供程序只支持架构名,那么必须指定一个两部分名称,形式为 schema.object。如果提供程序只支持目录名,那么必须指定一个三部分名称,形式为 catalog.schema.object。
  OPENROWSET 不接受参数变量。
  权限
  OPENROWSET 权限由传递到 OLE DB 提供程序的用户名的权限确定。
  示例
  A. 将 OPENROWSET 与 SELECT 语句及用于 SQL Server 的 Microsoft OLE DB 提供程序一起使用
  下面的示例使用用于 SQL Server 的 Microsoft OLE DB 提供程序访问 pubs 数据库中的 authors 表,该数据库在一个名为 seattle1 的远程服务器上。从 datasource、user_id 及 password 中初始化提供程序,并且使用 SELECT 语句定义返回的行集。
  USE pubs
  GO
  SELECT a.*
  FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass',
  'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname') AS a
  GO
  B. 将 OPENROWSET 与对象及用于 ODBC 的 OLE DB 提供程序一起使用
  下面的示例使用用于 ODBC 的 OLE DB 提供程序以及 SQL Server ODBC 驱动程序访问 pubs 数据库中的 authors 表,该数据库在一个名为 seattle1 的远程服务器中。提供程序用在 ODBC 提供程序所用的 ODBC 语法中指定的 provider_string 进行初始化,定义返回的行集时使用 catalog.schema.object 语法。
  USE pubs
  GO
  SELECT a.*
  FROM OPENROWSET('MSDASQL',
  'DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass',
  pubs.dbo.authors) AS a
  ORDER BY a.au_lname, a.au_fname
  GO
  C. 使用用于 Jet 的 Microsoft OLE DB 提供程序
  下面的示例通过用于 Jet 的 Microsoft OLE DB 提供程序访问 Microsoft Access Northwind 数据库中的 orders 表。
  说明  下面的示例假定已经安装了 Access。
  USE pubs
  GO
  SELECT a.*
  FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
  'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', Orders)
  AS a
  GO
  D. 使用 OPENROWSET 和 INNER JOIN 中的另一个表
  下面的示例从本地 SQL Server Northwind 数据库的 customers 表中,以及存储在相同计算机上 Access Northwind 数据库的 orders 表中选择所有数据
  说明  下面的示例假定已经安装了 Access。
  USE pubs
  GO
  SELECT c.*, o.*
  FROM Northwind.dbo.Customers AS c INNER JOIN
  OPENROWSET('Microsoft.Jet.OLEDB.4.0',
  'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', Orders)
  AS o
  ON c.CustomerID = o.CustomerID
  GO

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-393914-1-1.html 上篇帖子: SQL索引详解 下篇帖子: SQL VS NoSQL 如何选择数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表