http://www.cnblogs.com/skylaugh/p/6119345.htmlhtml
一、開始 —> 程序員
全部程序 —> 數據庫
Microsoft SQL Server 2005 —> 安全
配置工具 —> 服務器
SQL Server外圍應用配置器 —> 架構
功能的外圍應用配置器 —> ide
實例名 —> 函數
Database Engine —> 工具
即席遠程查詢 —> htm
啓用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