OPENQUERY (Transact-SQL)

適用于:SQL Server (所有支援的版本) Azure SQL 受控執行個體

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

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

Syntax

OPENQUERY ( linked_server ,'query' )  

注意

若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

linked_server
這是代表連結伺服器名稱的識別碼。

'query'
這是在連結伺服器中執行的查詢字串。 該字串的最大長度是 8 KB。

備註

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

在連結的伺服器上,OPENQUERY 無法用來執行擴充預存程序。 不過,可以利用四部分名稱在連結的伺服器上執行擴充預存程序。 例如:

EXEC SeattleSales.master.dbo.xp_msver  

FROM 子句中 OPENDATASOURCE、OPENQUERY 或 OPENROWSET 的任何呼叫都會與當做更新目標使用之這些函數的任何呼叫進行個別且獨立的評估,即使完全相同的引數套用至這兩種呼叫也一樣。 尤其,針對其中一個呼叫結果所套用的篩選或聯結條件對於另一個呼叫的結果沒有作用。

權限

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

範例

A. 執行 UPDATE 傳遞查詢

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

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

B. 執行 INSERT 傳遞查詢

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

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

C. 執行 DELETE 傳遞查詢

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

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

D. 執行 SELECT 傳遞查詢

下列範例會使用傳遞 SELECT 查詢來選取範例 B 中插入的資料列。

SELECT * FROM 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)
SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL)
WHERE (Transact-SQL)