Dela via


OPENQUERY (Transact-SQL)

Applies to:SQL ServerAzure SQL Managed Instance

Kör den angivna direktfrågan på den angivna länkade servern. Den här servern är en OLE DB-datakälla. OPENQUERY kan refereras i FROM-satsen för en fråga som om det vore ett tabellnamn. OPENQUERY kan också refereras som måltabell för en INSERT-, UPDATE- eller DELETE-instruktion. Detta gäller för ole db-providerns funktioner. Även om frågan kan returnera flera resultatuppsättningar returnerar OPENQUERY bara den första.

Transact-SQL syntaxkonventioner

Syntax

OPENQUERY ( linked_server ,'query' )  

Arguments

linked_server
Är en identifierare som representerar namnet på den länkade servern.

"fråga"
Körs frågesträngen på den länkade servern. Strängens maximala längd är 8 KB.

Anmärkningar

OPENQUERY accepterar inte variabler för sina argument.

OPENQUERY kan inte användas för att köra utökade lagrade procedurer på en länkad server. En utökad lagrad procedur kan dock köras på en länkad server med hjälp av ett namn i fyra delar. Till exempel:

EXEC SeattleSales.master.dbo.xp_msver  

Alla anrop till OPENDATASOURCE, OPENQUERY eller OPENROWSET i FROM-satsen utvärderas separat och oberoende av alla anrop till dessa funktioner som används som mål för uppdateringen, även om identiska argument levereras till de två anropen. I synnerhet har filter- eller kopplingsvillkor som tillämpas på resultatet av ett av dessa anrop ingen effekt på resultatet av det andra.

behörigheter

Alla användare kan köra OPENQUERY. De behörigheter som används för att ansluta till fjärrservern hämtas från de inställningar som definierats för den länkade servern.

Exempel

A. Köra en UPPDATERING-direktfråga

I följande exempel används en direktfråga UPDATE mot den länkade servern med namnet OracleSvr.

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

B. Köra en INSERT-direktfråga

I följande exempel används en direktfråga INSERT mot den länkade servern med namnet OracleSvr.

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

C. Köra en DELETE-direktfråga

I följande exempel används en direktfråga DELETE för att ta bort raden som infogas i exempel B.

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

D. Köra en SELECT-direktfråga

I följande exempel används en direktfråga SELECT för att välja raden som infogas i exempel B.

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

Se även

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)