在SQL Server中,行集函数是不确定性的,这意味着,每次调用,返回值不总是相同的。返回值是不确定的,这意味着,对于相同的输入值,不保证每次返回的值都是相同的。对行集函数的每次调用,行集函数都是单独计算。行集函数:OpenRowSet 和 OpenQuery 的行为和Base Table相似:
- 能够用于From子句,就像行集函数是一个Base Table,从行集函数中获取数据;
- 能够用于修改数据,修改命令(INSERT, UPDATE, or DELETE)直接作用于行集函数,对Base Table进行数据修改;
行集函数:OpenRowSet 语法
OPENROWSET
( { 'provider_name'
,{ 'datasource' ; 'user_id' ; 'password' | 'provider_string' }
,{ [ catalog. ][ schema. ]object | 'query' }
} )
‘Provider_name’ 参数:本文主要从SQL Server和Excel中访问数据,提供程序的名字分别是:SQLNCLI 和 Microsoft.ACE.OLEDB.12.0(处理 .xlsx文件);
'query' 参数:指定一个穿透查询(Pass-Through Query)字符串,本地的SQL Server实例不会处理该查询,在提供程序(Provider)中执行,并返回查询的结果;
一,默认情况下,OpenRowSet 是Disable状态
OpenRowSet函数能够用于从OLEDB数据源访问远程数据的条件是:
- 对于指定提供程序(Provider),DisallowAdhocAccess 注册表选项显式设置为0;
- 启用 Ad Hoc Distributed Queries 高级选项,在SQL Server中,该选项默认是Disable的,需要显式启用(Enable);
OPENROWSET can be used to access remote data from OLE DB data sources only when the DisallowAdhocAccess registry option is explicitly set to 0 for the specified provider, and the Ad Hoc Distributed Queries advanced configuration option is enabled. When these options are not set, the default behavior does not allow for ad hoc access.
在SQL Server中启用 “Ad Hoc Distributed Queries” 高级选项的脚本是:
-- enable
exec sp_configure 'sho