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.
platí pro: SQL Server 2016 (13.x) a novější verze
OPENROWSET
je alternativou pro přístup k tabulkám na propojeném serveru a je jednorázová metoda připojení a přístupu ke vzdáleným datům. Příkaz OPENROWSET
T-SQL obsahuje všechny informace o připojení potřebné pro přístup ke vzdáleným datům z externího zdroje dat.
Na funkci OPENROWSET
lze odkazovat v klauzuli FROM
dotazu, jako by se jednalo o název tabulky. Na OPENROWSET
funkci lze také odkazovat jako na cílovou tabulku INSERT
, UPDATE
nebo DELETE
příkazu, která podléhá schopnostem poskytovatele dat. I když dotaz může vrátit více sad výsledků, OPENROWSET
vrátí pouze první sadu výsledků.
Návod
Pokud chcete častěji odkazovat na externí zdroje dat, použijte místo toho odkazované servery. Další informace naleznete v tématu odkazované servery (databázový stroj).
OPENROWSET
bez operátoru BULK
je k dispozici pouze na SQL Serveru. Podrobnosti a odkazy na podobné příklady na jiných platformách:
-
OPENROWSET
podporuje hromadné operace prostřednictvím integrovanéhoBULK
poskytovatele na mnoha platformách databázového stroje, včetně Azure a Microsoft Fabric. Další informace naleznete v tématu OPENROWSET BULK (Transact-SQL). - Příklady ve službě Azure SQL Managed Instance najdete v tématu Dotazování zdrojů dat pomocíOPENROWSET .
- Azure SQL Database podporuje pouze OPENROWSET BULK (Transact-SQL).
- Informace a příklady s bezserverovými fondy SQL ve službě Azure Synapse najdete v tématu Jak používat OPENROWSET pomocí bezserverového fondu SQL ve službě Azure Synapse Analytics. Vyhrazené fondy SQL ve službě Azure Synapse nepodporují funkci
OPENROWSET
.
Syntaxe
OPENROWSET
syntaxe se používá k dotazování externích zdrojů dat:
OPENROWSET
( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password' | 'provider_string' }
, { [ catalog. ] [ schema. ] object | 'query' }
)
Argumenty
"provider_name"
Řetězec znaků, který představuje popisný název (nebo PROGID
) zprostředkovatele dat, jak je uvedeno v registru.
provider_name nemá výchozí hodnotu. Příklady názvů poskytovatelů jsou MSOLEDBSQL
, Microsoft.Jet.OLEDB.4.0
nebo MSDASQL
.
zdroje dat
Řetězcová konstanta, která odpovídá určitému zdroji dat.
zdroje dat je vlastnost DBPROP_INIT_DATASOURCE
, která se má předat IDBProperties
rozhraní zprostředkovatele pro inicializaci poskytovatele. Tento řetězec obvykle zahrnuje název databázového souboru, název databázového serveru nebo název, kterému poskytovatel rozumí pro vyhledání databáze nebo databází.
Zdrojem dat může být cesta k souboru C:\SAMPLES\Northwind.mdb'
pro poskytovatele Microsoft.Jet.OLEDB.4.0
nebo Server=Seattle1;Trusted_Connection=yes;
připojovacího řetězce pro poskytovatele MSOLEDBSQL
.
"user_id"
Řetězcová konstanta, která je uživatelské jméno předané zadanému zprostředkovateli dat.
user_id určuje kontext zabezpečení připojení a předává se jako vlastnost DBPROP_AUTH_USERID
pro inicializaci zprostředkovatele.
user_id nemůže být přihlašovací jméno systému Microsoft Windows.
'heslo'
Řetězcová konstanta, která je uživatelské heslo, které se má předat poskytovateli dat.
hesla se při inicializaci zprostředkovatele předá jako vlastnost DBPROP_AUTH_PASSWORD
.
heslo nemůže být heslo systému Microsoft Windows. Například:
SELECT a.* FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\SAMPLES\Northwind.mdb';
'<user name>';
'<password>',
Customers
) AS a;
"provider_string"
Připojovací řetězec specifický pro zprostředkovatele, který se předává jako vlastnost DBPROP_INIT_PROVIDERSTRING
pro inicializaci zprostředkovatele OLE DB.
provider_string obvykle zapouzdřuje všechny informace o připojení potřebné k inicializaci poskytovatele.
Seznam klíčových slov, která rozpozná zprostředkovatel OLE DB nativního klienta SYSTÉMU SQL Server, naleznete v tématu Inicializace a autorizační vlastnosti (Nativní klient OLE DB Provider). Z SQL Serveru 2022 (16.x) a SQL Server Management Studio 19 (SSMS) byla odebrána nativní ho klienta SQL Serveru (často zkrácená SNAC). 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 dále.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
Department
) AS d;
[ katalog. ] [ schéma. ] objekt
Vzdálená tabulka nebo zobrazení obsahující data, která OPENROWSET
by měla číst. Může se jednat o objekt se třemi částmi názvu s následujícími komponentami:
- katalog (volitelné) – název katalogu nebo databáze, ve které se zadaný objekt nachází.
- schéma (volitelné) – název schématu nebo vlastníka objektu pro zadaný objekt.
- objekt – název objektu, který jednoznačně identifikuje objekt, se kterým má pracovat.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
AdventureWorks2022.HumanResources.Department
) AS d;
Dotaz
Řetězcová konstanta odeslaná a spuštěná poskytovatelem. Místní instance SQL Serveru tento dotaz nezpracuje, ale zpracuje výsledky dotazu vrácené poskytovatelem, předávací dotaz. Předávací dotazy jsou užitečné, když se používají u poskytovatelů, kteří nedostupují svá tabulková data prostřednictvím názvů tabulek, ale pouze prostřednictvím příkazového jazyka. Předávací dotazy jsou podporovány na vzdáleném serveru, pokud poskytovatel dotazů podporuje objekt příkaz OLE DB a jeho povinná rozhraní.
Další informace naleznete v tématu rozhraní SQL Server Native Client (OLE DB).
SELECT a.*
FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
'SELECT TOP 10 GroupName, Name FROM AdventureWorks2022.HumanResources.Department'
) AS a;
Poznámky
OPENROWSET
lze použít pro přístup ke vzdáleným datům ze zdrojů dat OLE DB pouze tehdy, když je možnost registru DisallowAdhocAccess explicitně nastavena na hodnotu 0 pro zadaného poskytovatele a je povolená možnost rozšířené konfigurace distribuovaných dotazů Ad Hoc. Pokud tyto možnosti nejsou nastavené, výchozí chování neumožňuje ad hoc přístup.
Při přístupu ke vzdáleným zdrojům dat OLE DB není identita přihlášení důvěryhodných připojení automaticky delegována ze serveru, na kterém je klient připojen k serveru, na který se dotazuje. Musí být nakonfigurované delegování ověřování.
Názvy katalogů a schémat jsou vyžadovány, pokud poskytovatel dat podporuje více katalogů a schémat v zadaném zdroji dat. Hodnoty pro catalog
a schema
je možné je vynechat, pokud je zprostředkovatel dat nepodporuje. Pokud zprostředkovatel podporuje pouze názvy schémat, musí být zadán název formuláře schema.object
se dvěma částmi. Pokud poskytovatel podporuje pouze názvy katalogů, musí být zadán třídílný název formuláře catalog.schema.object
. Další informace najdete v tématu Transact-SQL konvence syntaxe.
Názvy tří částí jsou vyžadovány pro předávací dotazy, které používají zprostředkovatele OLE DB nativního klienta SQL Serveru.
OPENROWSET
nepřijímá proměnné pro argumenty.
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í.
Dovolení
OPENROWSET
oprávnění jsou určena oprávněními uživatelského jména předávaného poskytovateli dat.
Příklady
Tato část obsahuje obecné příklady, které ukazují, jak používat OPENROWSET.
Poznámka
Příklady, které ukazují použití INSERT...SELECT * FROM OPENROWSET(BULK...)
, naleznete v tématu OPENROWSET BULK (Transact-SQL).
Z SQL Serveru 2022 (16.x) a SQL Server Management Studio 19 (SSMS) byla odebrána nativní ho klienta SQL Serveru (často zkrácená SNAC). 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 dále.
A. Použití OPENROWSET s funkcí SELECT a zprostředkovatelEM OLE DB nativního klienta SQL Serveru
Následující příklad používá zprostředkovatele OLE DB nativního klienta SYSTÉMU SQL Server pro přístup k tabulce HumanResources.Department
v databázi AdventureWorks2022
na vzdáleném serveru Seattle1
. (Používá se MSOLEDBSQL
pro moderního zprostředkovatele dat OLE DB Microsoft SQL Serveru, který nahradil SQLNCLI
.) Příkaz SELECT
slouží k definování vrácené sady řádků. Řetězec zprostředkovatele obsahuje klíčová slova Server
a Trusted_Connection
. Tato klíčová slova jsou rozpoznána zprostředkovatelem OLE DB nativního klienta SYSTÉMU SQL Server.
SELECT a.*
FROM OPENROWSET(
'MSOLEDBSQL', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks2022.HumanResources.Department
ORDER BY GroupName, Name'
) AS a;
B. Použití zprostředkovatele Microsoft OLE DB pro Jet
Následující příklad přistupuje k tabulce Customers
v databázi Microsoft Access Northwind
prostřednictvím zprostředkovatele Microsoft OLE DB pro Jet.
Poznámka
Tento příklad předpokládá, že je nainstalována aplikace Microsoft Access. Pokud chcete tento příklad spustit, musíte nainstalovat Northwind
databázi.
SELECT CustomerID, CompanyName
FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',
Customers
);
C. Použití OPENROWSET a jiné tabulky v INNER JOIN
Následující příklad vybere všechna data z tabulky z Customers
místní instance databáze SQL Serveru Northwind
a z Orders
tabulky z databáze Microsoft Accessu Northwind
uložené ve stejném počítači.
Poznámka
Tento příklad předpokládá, že je nainstalována aplikace Microsoft Access. Pokud chcete tento příklad spustit, musíte nainstalovat Northwind
databázi.
USE Northwind;
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c
INNER JOIN OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'',
Orders) AS o
ON c.CustomerID = o.CustomerID;
Související obsah
-
DELETE (Transact-SQL) - klauzule FROM a JOIN, APPLY, PIVOT (Transact-SQL)
-
INSERT (Transact-SQL) -
OPENDATASOURCE (Transact-SQL) -
OPENQUERY (Transact-SQL) -
SELECT (Transact-SQL) - sp_addlinkedserver (Transact-SQL)
-
sp_serveroption (Transact-SQL) -
UPDATE (Transact-SQL) -
WHERE (Transact-SQL)