Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Na SQL Serveru existují tři způsoby vzdáleného spuštění dotazu:
OPENQUERYOPENROWSETEXECUTE AT
Tento článek popisuje tyto tři metody.
OPENQUERY
Provede zadaný předávací dotaz na zadaném propojeném serveru. Tento server je zdrojem dat OLE DB. V dotazu použijte OPENQUERY v FROM, jako by se jednalo o název tabulky. Na tabulku OPENQUERY můžete také odkazovat jako na cílovou tabulku příkazu INSERT, UPDATEnebo 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ů.
OPENQUERY vyžaduje předem přidaný a nakonfigurovaný propojený server a text požadavku na vzdálený server.
OPENQUERY pro přístup k objektům nevyžaduje konvenci názvu čtyř částí.
OPENROWSET
Obsahuje všechny informace o připojení potřebné pro přístup ke vzdáleným datům ze zdroje dat OLE DB. Tato metoda je alternativou pro přístup k tabulkám na propojeném serveru a jedná se o jednorázovou metodu připojení a přístupu ke vzdáleným datům pomocí OLE DB. Pro častější odkazy na zdroje dat OLE DB místo toho zvažte použití propojených serverů, PolyBasenebo přímých připojení mezi těmito dvěma zdroji dat prostřednictvím nástrojů, jako jsou SQL Server Integration Services (SSIS) nebo vlastní aplikace.
V dotazu použijte OPENROWSET v klauzuli FROM dotazu. Můžete také použít OPENROWSET jako cílovou tabulku pro příkazy INSERT, UPDATEnebo DELETE, pokud to umožňují schopnosti zprostředkovatele OLE DB. I když dotaz může vrátit více sad výsledků, OPENROWSET vrátí pouze první sadu výsledků.
OPENROWSET také podporuje hromadné operace prostřednictvím integrovaného poskytovatele BULK, který umožňuje čtení a vracení dat ze souboru jako sadu řádků.
Další informace OPENROWSET použít explicitně napsaný připojovací řetězec.
SPUSTIT NA ADRESE
Umožňuje dynamickému spuštění SQL na propojeném serveru. Jedním z parametrů volání EXECUTE je AT, který je navržen tak, aby obešel omezení OPENQUERY a OPENROWSET.
EXECUTE (``<query>``) AT [<linked server>] je dynamický SQL, který může vrátit libovolný počet sad výsledků ze vzdáleného serveru.
Doprovodné materiály k dynamickému SQL
Vyhněte se použití dynamických příkazů SQL v aplikacích a omezte oprávnění pro uživatele s přístupem k dynamickým příkazům SQL. Vytváření dotazů ke spuštění prostřednictvím EXECUTE může vytvářet ohrožení zabezpečení webů a aplikací prostřednictvím útoků prostřednictvím injektáže SQL. Další informace naleznete v tématu SQL Injection.
Pokud jde o výkon, otestujte vzdálené dotazy:
- Ujistěte se, že se na vzdáleném serveru spustí co nejvíce logiky.
- Odpovídajícím způsobem ověřte indexy v tabulkách indexu vzdáleného serveru pro podporu dotazu.
- Mějte na paměti, že použití vzdálených dotazů v základu kódu komplikuje správu verzí databázového kódu a údržbu vývojových a testovacích prostředí.
Příklady
A. Provedení předávacího dotazu SELECT pomocí OPENQUERY
Následující příklad používá předávací dotaz SELECT k výběru řádků s OPENQUERY:
SELECT *
FROM OPENQUERY ([linkedserver],
'SELECT * FROM AdventureWorksLT.SalesLT.Customer');
B. Provedení předávacího dotazu SELECT pomocí OPENROWSET
Následující příklad používá průchozí SELECT dotaz k výběru řádků, které obsahují OPENROWSET
SELECT a.*
FROM OPENROWSET('MSOLEDBSQL', [linkedserver],
'SELECT * FROM AdventureWorksLT.SalesLT.Customer') AS a;
Nativní klient SQL Serveru (často zkracovaný jako SNAC) byl odebrán z SQL Serveru 2022 (16.x) a SQL Server Management Studio 19 (SSMS). Pro nový vývoj se nedoporučuje zprostředkovatele SQL Server Native Client OLE DB (SQLNCLI nebo SQLNCLI11) ani starší verze zprostředkovatele Microsoft OLE DB pro SQL Server (SQLOLEDB). Přejděte na nový ovladač Microsoft OLE DB (MSOLEDBSQL) pro SQL Server do budoucna.
C. Spuštění předávacího dotazu SELECT pomocí příkazu EXECUTE AT
Následující příklad používá průchozí SELECT dotaz k výběru řádků, které obsahují EXECUTE ... AT
EXECUTE ('SELECT * FROM AdventureWorksLT.SalesLT.Customer') AT [linkedserver]
D. Provádění více příkazů SELECT
Následující příklad používá přímý SELECT dotaz a získává více sad výsledků.
EXECUTE ('SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer;
SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.CustomerAddress;') AT [linkedserver];
E. Provedení příkazu SELECT a předání dvou argumentů
Následující příklad používá předávací SELECT se dvěma argumenty.
EXECUTE ('SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer
WHERE CustomerID = ? AND LastName = ?', 10, 'Garza') AT [linkedserver];
F. Provedení příkazu SELECT a předání dvou argumentů pomocí proměnných
Následující příklad používá průchozí SELECT se dvěma argumenty pomocí proměnných.
DECLARE @CustomerID AS INT
DECLARE @LastName AS VARCHAR(100)
SET @CustomerID = 10
SET @LastName = 'Garza'
EXECUTE ('SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer
WHERE CustomerID = ? AND LastName = ?', @CustomerID, @LastName) AT [linkedserver];
G. Spouštění příkazů DDL pomocí příkazu EXECUTE pomocí propojených serverů
Následující příklad používá příkaz DDL na propojeném serveru.
EXECUTE (
'USE TempDB
IF OBJECT_ID(''dbo.Table1'') IS NOT NULL
DROP TABLE dbo.Table1
CREATE TABLE dbo.Table1
(
Column1 INT
)' ) AT [linkedserver];
Po dokončení testování vyčistěte vytvořené objekty.
EXECUTE (
'USE TempDB
IF OBJECT_ID(''dbo.Table1'') IS NOT NULL
DROP TABLE dbo.Table1'
) AT [linkedserver];
EXECUTE sp_dropserver 'linkedserver'
Další příklady
Další příklady, které ukazují použití INSERT...SELECT * FROM OPENROWSET(BULK...), najdete v následujících tématech:
- příklady hromadného importu a exportu dokumentů XML (SQL Server)
- zachovat hodnoty identity při hromadném importu dat (SQL Server)
- zachovat hodnoty null nebo použít výchozí hodnoty při hromadném importu (SQL Server)
- použití formátu souboru k hromadnému importu dat (SQL Server)
- použití formátu znaku k importu nebo exportu dat (SQL Server)
- přeskočit sloupec tabulky (SQL Server) pomocí formátového souboru
- Přeskočení datového pole (SQL Server) pomocí formátového souboru
- Mapování sloupců tabulky na pole Data-File (SQL Server) pomocí formátového souboru
Viz také
- DELETE (Transact-SQL)
- OD (Transact-SQL)
- hromadný import a export dat (SQL Server)
- INSERT (Transact-SQL)
- OPENDATASOURCE (Transact-SQL)
- OPENQUERY (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SELECT (Transact-SQL)
- sp_addlinkedserver (Transact-SQL)
- sp_serveroption (Transact-SQL)
- UPDATE (Transact-SQL)
- WHERE (Transact-SQL)