码迷,mamicode.com
首页 > 其他好文 > 详细

OpenRowSet 用法

时间:2015-06-03 19:07:56      阅读:1517      评论:0      收藏:0      [点我收藏+]

标签:

OpenRowSet 函数返回RowSet,可以在查询的 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‘ 

是字符串常量,发送到提供程序并由提供程序执行。SQL Server 的本地实例不处理该查询,但处理由访问接口返回的查询结果。

OpenRowSet还有bulk选项,参见MSDN:https://msdn.microsoft.com/zh-cn/library/ms190312.aspx

1,启用和停用 OpenRowSet,默认情况下,SSMS是disable状态

-- enable
exec sp_configure show advanced options, 1;
RECONFIGURE;
exec  sp_configure Ad Hoc Distributed Queries, 1;
RECONFIGURE;
GO


--disable
exec sp_configure show advanced options, 0;
RECONFIGURE;
exec  sp_configure Ad Hoc Distributed Queries, 0;
RECONFIGURE;
GO

2,OpenRowSet 能够执行 sql 的select 查询语句,返回结果集

select *
FROM OPENROWSET(
    SQLNCLI, 
    Server=.;Trusted_Connection=yes;,
    select * from db_study.dbo.test  --query statement
) AS t;

3,OpenRowSet 能够在query 子句中,使用 exec 执行存储过程,返回结果集

create PROCEDURE [dbo].[usp_test]
AS
BEGIN
    SET NOCOUNT ON;

    select *
    from dbo.test
    order by code desc
END
select *
FROM OPENROWSET(
    SQLNCLI, 
    Server=.;Trusted_Connection=yes;,
    exec db_study.[dbo].[usp_test]  --query statement
) AS t;

4,OpenRowSet能够从Excel中读取数据

OpenRowSet的第一个参数是引擎类型,如果是Excel 那么第一个参数可能是Excel的引擎,‘Microsoft.Jet.OLEDB.4.0‘,用于处理xls文件;‘Microsoft.ACE.OLEDB.12.0‘ ,用于处理xlsx文件。

 

注册‘Microsoft.ACE.OLEDB.12.0‘引擎,否则会报错:

OLE DB provider ‘Microsoft.ACE.OLEDB.12.0‘ cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.”

EXEC master.dbo.sp_MSset_oledb_prop NMicrosoft.ACE.OLEDB.12.0, NAllowInProcess, 1
EXEC master.dbo.sp_MSset_oledb_prop NMicrosoft.ACE.OLEDB.12.0, NDynamicParameters, 1 
--exec sp_configure ‘show advanced options‘,1
--reconfigure
--go
--exec sp_configure ‘Ad Hoc Distributed Queries‘,1
--reconfigure
--go
--exec sp_configure ‘ole automation procedures‘,1
--reconfigure
--exec sp_configure ‘xp_cmdshell‘,1
--reconfigure
select * 
from OpenRowSet(
    Microsoft.ACE.OLEDB.12.0, 
    Excel 12.0;HDR=Yes;IMEX=1;Database=D:\test.xlsx, 
    select * from [sheet1$]
) 

 

OpenRowSet 用法

标签:

原文地址:http://www.cnblogs.com/ljhdo/p/4549180.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!