OPENQUERY (Transact-SQL)

更新: 2006 年 7 月 17 日

在指定的連結伺服器上,執行指定的傳遞查詢。這部伺服器是 OLE DB 資料來源。您可以依照資料表名稱的相同方式,在查詢的 FROM 子句中參考 OPENQUERY。OPENQUERY 也可以被當作 INSERT、UPDATE 或 DELETE 陳述式的目標資料表加以參考。它是根據 OLE DB 提供者的功能而定。雖然查詢可以傳回多個結果集,但 OPENQUERY 只傳回第一個結果集。

主題連結圖示Transact-SQL 語法慣例

語法

OPENQUERY ( linked_server ,'query' )

引數

  • linked_server
    這是代表連結伺服器名稱的識別碼。
  • 'query'
    這是在連結伺服器中執行的查詢字串。該字串的最大長度是 8 KB。

備註

OPENQUERY 不接受變數作為其引數。

在 SQL Server 2000 和更新的版本中,不能用 OPENQUERY 在連結伺服器上執行擴充預存程序。不過,可以利用四部分名稱在連結的伺服器上執行擴充預存程序。例如:

EXEC SeattleSales.master.dbo.xp_msver

權限

任何使用者都可以執行 OPENQUERY。您可以從定義給連結伺服器的設定,取得用來連接到遠端伺服器的權限。

範例

A. 執行 SELECT 傳遞查詢

下列範例會利用 Microsoft OLE DB Provider for Oracle,對 Oracle 資料庫建立一個名稱為 OracleSvr 的連結伺服器。這個範例會接著對這個連結伺服器使用 SELECT 傳遞查詢。

ms188427.note(zh-tw,SQL.90).gif附註:
這個範例假設已建立稱為 ORCLDB 的 Oracle 資料庫別名。
EXEC sp_addlinkedserver 'OracleSvr', 
   'Oracle 7.3', 
   'MSDAORA', 
   'ORCLDB'
GO
SELECT *
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles') 
GO

B. 執行 UPDATE 傳遞查詢

下列範例會對在範例 A 中建立的連結伺服器使用 UPDATE 傳遞查詢。

UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101') 
SET name = 'ADifferentName';

C. 執行 INSERT 傳遞查詢

下列範例會對在範例 A 中建立的連結伺服器使用 INSERT 傳遞查詢。

INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles')
VALUES ('NewTitle');

D. 執行 DELETE 傳遞查詢

下列範例會使用 DELETE 傳遞查詢來刪除範例 C 中插入的資料列。

DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');

請參閱

參考

DELETE (Transact-SQL)
FROM (Transact-SQL)
INSERT (Transact-SQL)
OPENDATASOURCE (Transact-SQL)
OPENROWSET (Transact-SQL)
資料列集函數 (Transact-SQL)
SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL)
WHERE (Transact-SQL)

其他資源

分散式查詢

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 7 月 17 日

新增內容:
  • 加入 INSERT、UPDATE 和 DELETE 範例。

2006 年 4 月 14 日

新增內容:
  • 新增擴充預存程序限制的因應措施。