Megosztás a következőn keresztül:


OPENROWSET (Transact-SQL)

A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók

OPENROWSET a csatolt kiszolgálók tábláinak elérésére szolgál, és egyszeri, alkalmi módszer a távoli adatok csatlakoztatására és elérésére. A OPENROWSET T-SQL-parancsok tartalmazzák a külső adatforrásból származó távoli adatok eléréséhez szükséges összes kapcsolati információt.

A OPENROWSET függvény a lekérdezés FROM záradékában úgy hivatkozhat rá, mintha táblanév lenne. A OPENROWSET függvény egy , INSERTvagy UPDATE utasítás céltáblájaként DELETEis hivatkozhat, az adatszolgáltató képességeinek függvényében. Bár a lekérdezés több eredményhalmazt is visszaadhat, OPENROWSET csak az elsőt adja vissza.

Tip

A külső adatforrásokra való gyakoribb hivatkozáshoz használjon csatolt kiszolgálókat. További információ: csatolt kiszolgálók (adatbázismotor).

OPENROWSET anélkül, hogy az BULK operátor csak az SQL Serveren érhető el. Más platformokon található hasonló példák részletei és hivatkozásai:

Transact-SQL szintaxis konvenciói

Syntax

OPENROWSET szintaxis külső adatforrások lekérdezésére szolgál:

OPENROWSET
(  'provider_name'
    , { 'datasource' ; 'user_id' ; 'password' | 'provider_string' }
    , {  [ catalog. ] [ schema. ] object | 'query' }
)

Arguments

'provider_name'

Karaktersztring, amely az adatszolgáltatónak a beállításjegyzékben megadott rövid nevét (vagy PROGID) jelöli. provider_name nincs alapértelmezett értéke. A szolgáltatónév például MSOLEDBSQL, Microsoft.Jet.OLEDB.4.0vagy MSDASQL.

'datasource'

Egy adott adatforrásnak megfelelő sztringállandó. adatforrás- a DBPROP_INIT_DATASOURCE tulajdonság, amelyet át kell adni a szolgáltató IDBProperties felületének a szolgáltató inicializálásához. Ez a sztring általában tartalmazza az adatbázisfájl nevét, egy adatbázis-kiszolgáló nevét, vagy egy olyan nevet, amelyet a szolgáltató az adatbázis vagy adatbázisok helyének kiválasztásához ismer.

Az adatforrás lehet C:\SAMPLES\Northwind.mdb' szolgáltató fájlútvonala Microsoft.Jet.OLEDB.4.0, vagy Server=Seattle1;Trusted_Connection=yes; szolgáltatóhoz MSOLEDBSQL kapcsolati sztring.

'user_id'

Egy sztringállandó, amely a megadott adatszolgáltatónak átadott felhasználónév. user_id megadja a kapcsolat biztonsági környezetét, és DBPROP_AUTH_USERID tulajdonságként továbbítja a szolgáltató inicializálásához. user_id nem lehet Microsoft Windows-bejelentkezési név.

'password'

Sztringállandó, amely az adatszolgáltatónak továbbítandó felhasználói jelszó. jelszó a DBPROP_AUTH_PASSWORD tulajdonságként lesz átadva a szolgáltató inicializálásakor. jelszó nem lehet Microsoft Windows-jelszó. Például:

SELECT a.* FROM OPENROWSET(
    'Microsoft.Jet.OLEDB.4.0',
    'C:\SAMPLES\Northwind.mdb';
    '<user name>';
    '<password>',
    Customers
) AS a;

'provider_string'

Az OLE DB-szolgáltató inicializálásához DBPROP_INIT_PROVIDERSTRING tulajdonságként átadott szolgáltatóspecifikus kapcsolati sztring. provider_string általában tartalmazza a szolgáltató inicializálásához szükséges összes kapcsolati információt.

Az SQL Server natív ügyfél OLE DB-szolgáltatója által felismert kulcsszavak listáját Inicializálási és engedélyezési tulajdonságok (natív ügyfél OLE DB-szolgáltató). A SQL Server natív ügyfél (gyakran rövidített SNAC) el lett távolítva az SQL Server 2022 (16.x) és az SQL Server Management Studio 19 (SSMS) szolgáltatásból. Az SQL Server natív ügyféloldali OLE DB-szolgáltatója (SQLNCLI vagy SQLNCLI11) és az SQL Serverhez készült régi Microsoft OLE DB-szolgáltató (SQLOLEDB) nem ajánlott új fejlesztéshez. Váltson az SQL Serverhez készült új Microsoft OLE DB-illesztőprogramra (MSOLEDBSQL).

SELECT d.* FROM OPENROWSET(
    'MSOLEDBSQL',
    'Server=Seattle1;Trusted_Connection=yes;',
    Department
) AS d;

[ katalógus. ] [ séma. ] objektum

A OPENROWSET olvasni kívánt adatokat tartalmazó távoli táblázat vagy nézet. Ez lehet háromrészes név objektum a következő összetevőkkel:

  • katalógus (nem kötelező) – annak a katalógusnak vagy adatbázisnak a neve, amelyben a megadott objektum található.
  • séma (nem kötelező) – a megadott objektum séma- vagy objektumtulajdonosának neve.
  • objektum – az objektum neve, amely egyedileg azonosítja a dolgozni kívánt objektumot.
SELECT d.* FROM OPENROWSET(
    'MSOLEDBSQL',
    'Server=Seattle1;Trusted_Connection=yes;',
    AdventureWorks2022.HumanResources.Department
) AS d;

'query'

A szolgáltató által küldött és végrehajtott sztringállandó. Az SQL Server helyi példánya nem dolgozza fel ezt a lekérdezést, hanem feldolgozza a szolgáltató által visszaadott lekérdezési eredményeket, egy átmenő lekérdezést. Az átmenő lekérdezések akkor hasznosak, ha olyan szolgáltatókon használják, amelyek nem teszik elérhetővé táblázatos adataikat táblaneveken keresztül, hanem csak parancsnyelven keresztül. Az átmenő lekérdezések támogatottak a távoli kiszolgálón, amennyiben a lekérdezésszolgáltató támogatja az OLE DB command objektumot és annak kötelező felületeit.

További információ: SQL Server natív ügyféloldali (OLE DB)-interfészek.

SELECT a.*
FROM OPENROWSET(
    'MSOLEDBSQL',
    'Server=Seattle1;Trusted_Connection=yes;',
    'SELECT TOP 10 GroupName, Name FROM AdventureWorks2022.HumanResources.Department'
) AS a;

Remarks

OPENROWSET az OLE DB-adatforrásokból származó távoli adatok elérésére csak akkor használható, ha a DisallowAdhocAccess beállításjegyzék-beállítás explicit módon 0 értékre van állítva a megadott szolgáltatóhoz, és engedélyezve van az alkalmi elosztott lekérdezések speciális konfigurációs beállítása. Ha ezek a beállítások nincsenek beállítva, az alapértelmezett viselkedés nem teszi lehetővé az alkalmi hozzáférést.

Távoli OLE DB-adatforrások elérésekor a megbízható kapcsolatok bejelentkezési identitása nem lesz automatikusan delegálva attól a kiszolgálótól, amelyen az ügyfél csatlakozik a lekérdezett kiszolgálóhoz. A hitelesítési delegálást konfigurálni kell.

Katalógus- és sémanevekre akkor van szükség, ha az adatszolgáltató több katalógust és sémát támogat a megadott adatforrásban. catalog Az értékek kihagyhatók, schema ha az adatszolgáltató nem támogatja őket. Ha a szolgáltató csak sémaneveket támogat, meg kell adni az űrlap schema.object kétrészes nevét. Ha a szolgáltató csak a katalógusneveket támogatja, meg kell adni az űrlap catalog.schema.object háromrészes nevét. További információ: Transact-SQL szintaxiskonvenciák.

Az SQL Server natív ügyfél OLE DB-szolgáltatóját használó átmenő lekérdezésekhez három részből álló nevek szükségesek.

OPENROWSET nem fogad el változókat az argumentumaihoz.

A OPENDATASOURCE záradékban szereplő OPENQUERY, OPENROWSETvagy FROM hívásait a rendszer a frissítés céljaként használt függvények hívásától függetlenül értékeli, még akkor is, ha a két hívás azonos argumentumokat ad meg. Az egyik ilyen hívás eredményére alkalmazott szűrési vagy csatlakozási feltételeknek nincs hatása a másik eredményére.

Permissions

OPENROWSET az engedélyeket az adatszolgáltatónak átadott felhasználónév engedélyei határozzák meg.

Limitations

A Microsoft Access adatbázismotor illesztőprogramja nem támogatott.

Examples

Ez a szakasz általános példákat tartalmaz az OPENROWSET használatának bemutatására.

Note

A használatot INSERT...SELECT * FROM OPENROWSET(BULK...)szemléltető példákért lásd: OPENROWSET BULK (Transact-SQL).

A SQL Server natív ügyfél (gyakran rövidített SNAC) el lett távolítva az SQL Server 2022 (16.x) és az SQL Server Management Studio 19 (SSMS) szolgáltatásból. Az SQL Server natív ügyféloldali OLE DB-szolgáltatója (SQLNCLI vagy SQLNCLI11) és az SQL Serverhez készült régi Microsoft OLE DB-szolgáltató (SQLOLEDB) nem ajánlott új fejlesztéshez. Váltson az SQL Serverhez készült új Microsoft OLE DB-illesztőprogramra (MSOLEDBSQL).

A. Az OPENROWSET használata a SELECT és az SQL Server natív ügyféloldali OLE DB-szolgáltatójával

Az alábbi példa az SQL Server natív ügyféloldali OLE DB-szolgáltatójának használatával éri el a HumanResources.Department táblát a távoli kiszolgáló AdventureWorks2025Seattle1 adatbázisában. (Használja MSOLEDBSQL a modern Microsoft SQL Server OLE DB adatszolgáltatót, amely lecserélte SQLNCLI.) A SELECT visszaadott sorkészlet meghatározásához utasítást használunk. A szolgáltatói sztring tartalmazza a Server és Trusted_Connection kulcsszavakat. Ezeket a kulcsszavakat az SQL Server natív ügyféloldali OLE DB-szolgáltatója ismeri fel.

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. A Microsoft OLE DB Provider for Jet használata

Az alábbi példa a Microsoft Access Customers adatbázis Northwind táblája a Microsoft OLE DB Provider for Jeten keresztül érhető el.

Note

Ez a példa feltételezi, hogy a Microsoft Access telepítve van. A példa futtatásához telepítenie kell a Northwind adatbázist.

SELECT CustomerID, CompanyName
FROM OPENROWSET(
    'Microsoft.Jet.OLEDB.4.0',
    'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
    'admin';'',
    Customers
);

C. OPENROWSET és egy másik tábla használata INNER JOIN-ban

Az alábbi példa az Customers SQL Server-adatbázis Northwind helyi példányából és az Orders ugyanazon a számítógépen tárolt Microsoft Access-adatbázis Northwind táblájából választja ki az összes adatot a táblából.

Note

Ez a példa feltételezi, hogy a Microsoft Access telepítve van. A példa futtatásához telepítenie kell a Northwind adatbázist.

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;