Sdílet prostřednictvím


OPENROWSET (Transact-SQL)

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, UPDATEnebo 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:

Transact-SQL konvence syntaxe

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.0nebo 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, OPENQUERYnebo 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;