SQL的OPENROWSET开启和使用方法
http://www.cnblogs.com/skylaugh/p/6119345.html
1、開(kāi)始?—>?
所有程序??—>?
Microsoft?SQL?Server?2005??—>?
配置工具??—>?
SQL?Server外圍應(yīng)用配置器??—>?
功能的外圍應(yīng)用配置器??—>?
實(shí)例名??—>?
Database?Engine??—>?
即席遠(yuǎn)程查詢(xún)??—>?
啟用OpenRowset和OpenDatasource支持。?
?
?
?
2.代碼啟用
???啟用:
exec?sp_configure?'show?advanced?options',1
reconfigure
exec?sp_configure?'Ad?Hoc?Distributed?Queries',1
reconfigure
????關(guān)閉:
exec?sp_configure?'Ad?Hoc?Distributed?Queries',0
reconfigure
exec?sp_configure?'show?advanced?options',0
reconfigure?
?
在不啟用OpenRowset/OpenDatasource時(shí)使用如下語(yǔ)句:
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??這個(gè)語(yǔ)句是從access導(dǎo)入數(shù)據(jù)到SQL2005數(shù)據(jù)表
你將看到“
??????SQL?Server?阻止了對(duì)組件?'Ad?Hoc?Distributed?Queries'?的?STATEMENT'OpenRowset/OpenDatasource'?的訪問(wèn),因?yàn)榇私M件已作為此服務(wù)器安全配置的一部分而被關(guān)閉。系統(tǒng)管理員可以通過(guò)使用?sp_configure?啟用?'Ad?Hoc?Distributed?Queries'。有關(guān)啟用?'Ad?Hoc?Distributed?Queries'?的詳細(xì)信息,請(qǐng)參閱?SQL?Server?聯(lián)機(jī)叢書(shū)中的?"外圍應(yīng)用配置器"??”錯(cuò)誤提升信息。?
?
?
?
?
OPENROWSET
?
包含訪問(wèn)?OLE?DB?數(shù)據(jù)源中的遠(yuǎn)程數(shù)據(jù)所需的全部連接信息。當(dāng)訪問(wèn)鏈接服務(wù)器中的表時(shí),這種方法是一種替代方法,并且是一種使用?OLE?DB?連接并訪問(wèn)遠(yuǎn)程數(shù)據(jù)的一次性的、特殊的方法。可以在查詢(xún)的?FROM?子句中像引用表名那樣引用?OPENROWSET?函數(shù)。依據(jù)?OLE?DB?提供程序的能力,還可以將?OPENROWSET?函數(shù)引用為?INSERT、UPDATE?或?DELETE?語(yǔ)句的目標(biāo)表。盡管查詢(xún)可能返回多個(gè)結(jié)果集,然而?OPENROWSET?只返回第一個(gè)。
?
?
語(yǔ)法
OPENROWSET?(?'provider_name'
????,?{?'datasource'?;?'user_id'?;?'password'
????????|?'provider_string'?}
????,?{?[?catalog.]?[?schema.]?object
????????|?'query'?}?
????)?
?
?
參數(shù)
'provider_name'
?
字符串,它代表在注冊(cè)表中指定的?OLE?DB?提供程序的友好名。provider_name?沒(méi)有默認(rèn)值。
?
'datasource'
?
字符串常量,它對(duì)應(yīng)著某個(gè)特定的?OLE?DB?數(shù)據(jù)源。datasource?是將被傳遞到提供程序?IDBProperties?接口以初始化提供程序的?DBPROP_INIT_DATASOURCE?屬性。通常,這個(gè)字符串包含數(shù)據(jù)庫(kù)文件的名稱(chēng)、數(shù)據(jù)庫(kù)服務(wù)器的名稱(chēng),或者提供程序能理解的用于查找數(shù)據(jù)庫(kù)的名稱(chēng)。?
?
'user_id'
?
字符串常量,它是傳遞到指定?OLE?DB?提供程序的用戶(hù)名。user_id?為連接指定安全上下文,并將它作為?DBPROP_AUTH_USERID?屬性傳遞進(jìn)來(lái)以初始化提供程序。
?
'password'
?
字符串常量,它是將被傳遞到?OLE?DB?提供程序的用戶(hù)密碼。當(dāng)初始化提供程序時(shí),將?password?作為?DBPROP_AUTH_PASSWORD?屬性傳遞進(jìn)來(lái)。
?
'provider_string'
?
提供程序特定的連接字符串,將它作為?DBPROP_INIT_PROVIDERSTRING?屬性傳遞進(jìn)來(lái)以初始化?OLE?DB?提供程序。通常?provider_string?封裝初始化提供程序所需的所有連接信息。
?
catalog
?
目錄或數(shù)據(jù)庫(kù)的名稱(chēng),其中駐留著指定的對(duì)象。
?
schema
?
架構(gòu)的名稱(chēng)或指定對(duì)象的對(duì)象所有者名稱(chēng)。
?
object
?
對(duì)象名稱(chēng),它唯一地標(biāo)識(shí)出將要操作的對(duì)象。
?
'query'
?
是字符串常量,發(fā)送到提供程序并由提供程序執(zhí)行。Microsoft®?SQL?Server??不處理該查詢(xún),但處理由提供程序返回的查詢(xún)結(jié)果(直接傳遞查詢(xún))。對(duì)于有些提供程序,它們并沒(méi)有通過(guò)表名而是通過(guò)命令語(yǔ)言表現(xiàn)自己的表格格式數(shù)據(jù),那么將直接傳遞查詢(xún)用于這些提供程序是非常有用的。只要查詢(xún)提供程序支持?OLE?DB?Command?對(duì)象及其強(qiáng)制接口,那么在遠(yuǎn)程服務(wù)器上就支持直接傳遞查詢(xún)。有關(guān)更多信息,請(qǐng)參見(jiàn)?SQL?Server?OLE?DB?程序員參考。?
?
?
注釋
如果?OLE?DB?提供程序在指定的數(shù)據(jù)源中支持多個(gè)目錄和架構(gòu),那么就需要目錄及架構(gòu)名稱(chēng)。如果?OLE?DB?提供程序并不支持目錄和架構(gòu),那么可以省略?catalog?及?schema?的值。?
?
如果提供程序只支持架構(gòu)名,那么必須指定一個(gè)兩部分名稱(chēng),形式為?schema.object。如果提供程序只支持目錄名,那么必須指定一個(gè)三部分名稱(chēng),形式為?catalog.schema.object。
?
OPENROWSET?不接受參數(shù)變量。
?
?
權(quán)限
OPENROWSET?權(quán)限由傳遞到?OLE?DB?提供程序的用戶(hù)名的權(quán)限確定。?
?
?
示例
?
A.?將?OPENROWSET?與?SELECT?語(yǔ)句及用于?SQL?Server?的?Microsoft?OLE?DB?提供程序一起使用
下面的示例使用用于?SQL?Server?的?Microsoft?OLE?DB?提供程序訪問(wèn)?pubs?數(shù)據(jù)庫(kù)中的?authors?表,該數(shù)據(jù)庫(kù)在一個(gè)名為?seattle1?的遠(yuǎn)程服務(wù)器上。從?datasource、user_id?及?password?中初始化提供程序,并且使用?SELECT?語(yǔ)句定義返回的行集。
?
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?與對(duì)象及用于?ODBC?的?OLE?DB?提供程序一起使用
下面的示例使用用于?ODBC?的?OLE?DB?提供程序以及?SQL?Server?ODBC?驅(qū)動(dòng)程序訪問(wèn)?pubs?數(shù)據(jù)庫(kù)中的?authors?表,該數(shù)據(jù)庫(kù)在一個(gè)名為?seattle1?的遠(yuǎn)程服務(wù)器中。提供程序用在?ODBC?提供程序所用的?ODBC?語(yǔ)法中指定的?provider_string?進(jìn)行初始化,定義返回的行集時(shí)使用?catalog.schema.object?語(yǔ)法。
?
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?提供程序
下面的示例通過(guò)用于?Jet?的?Microsoft?OLE?DB?提供程序訪問(wèn)?Microsoft?Access?Northwind?數(shù)據(jù)庫(kù)中的?orders?表。
?
?
?
說(shuō)明??下面的示例假定已經(jīng)安裝了?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?中的另一個(gè)表
下面的示例從本地?SQL?Server?Northwind?數(shù)據(jù)庫(kù)的?customers?表中,以及存儲(chǔ)在相同計(jì)算機(jī)上?Access?Northwind?數(shù)據(jù)庫(kù)的?orders?表中選擇所有數(shù)據(jù)
?
?
?
說(shuō)明??下面的示例假定已經(jīng)安裝了?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
轉(zhuǎn)載于:https://www.cnblogs.com/liuqiyun/p/7645443.html
總結(jié)
以上是生活随笔為你收集整理的SQL的OPENROWSET开启和使用方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 快速幂(求A^B的最后三位数表示的整数(
- 下一篇: LeetCode 51 N 皇后