Sdílet prostřednictvím


OPENQUERY (Transact-SQL)

Applies to:SQL ServerAzure SQL Managed Instance

Provede zadaný předávací dotaz na zadaném propojeném serveru. Tento server je zdrojem dat OLE DB. OPENQUERY lze odkazovat v klauzuli FROM dotazu, jako by se jednalo o název tabulky. OPENQUERY lze také odkazovat jako na cílovou tabulku příkazu INSERT, UPDATE nebo DELETE. To podléhá schopnostem zprostředkovatele OLE DB. I když dotaz může vrátit více sad výsledků, OPENQUERY vrátí pouze první sadu výsledků.

Transact-SQL konvence syntaxe

Syntaxe

OPENQUERY ( linked_server ,'query' )  

Argumenty

linked_server
Je identifikátor představující název propojeného serveru.

Dotaz
Je řetězec dotazu spuštěný na propojeném serveru. Maximální délka řetězce je 8 kB.

Poznámky

OPENQUERY nepřijímá proměnné pro své argumenty.

OPENQUERY nelze použít ke spouštění rozšířených uložených procedur na propojeném serveru. Rozšířená uložená procedura se ale dá spustit na propojeném serveru pomocí názvu čtyř částí. Například:

EXEC SeattleSales.master.dbo.xp_msver  

Jakékoli volání OPENDATASOURCE, OPENQUERY nebo OPENROWSET v klauzuli FROM se vyhodnocuje samostatně a nezávisle na každém volání těchto funkcí používaných jako cíl aktualizace, i když jsou do těchto dvou volání zadány stejné argumenty. Konkrétně platí, že podmínky filtrování nebo spojení použité na výsledek jednoho z těchto volání nemají žádný vliv na výsledky druhého volání.

Povolení

Libovolný uživatel může spustit OPENQUERY. Oprávnění, která se používají pro připojení ke vzdálenému serveru, se získávají z nastavení definovaných pro propojený server.

Příklady

A. Spuštění předávacího dotazu UPDATE

Následující příklad používá předávací UPDATE dotaz na odkazovaný server s názvem OracleSvr.

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

B. Spuštění předávacího dotazu INSERT

Následující příklad používá předávací INSERT dotaz na odkazovaný server s názvem OracleSvr.

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

C. Provedení předávacího dotazu DELETE

Následující příklad používá předávací DELETE dotaz k odstranění řádku vloženého v příkladu B.

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

D. Spuštění předávacího dotazu SELECT

Následující příklad používá předávací SELECT dotaz k výběru řádku vloženého v příkladu B.

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

Viz také

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)