Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2016 (13.x) en latere versies
OPENROWSET
is een alternatief voor het openen van tabellen op een gekoppelde server en is een eenmalige ad-hocmethode voor het verbinden en openen van externe gegevens. Een OPENROWSET
T-SQL-opdracht bevat alle verbindingsgegevens die vereist zijn voor toegang tot externe gegevens vanuit een externe gegevensbron.
De functie OPENROWSET
kan worden verwezen in de FROM
component van een query alsof deze een tabelnaam is. Er OPENROWSET
kan ook naar de functie worden verwezen als de doeltabel van een INSERT
, UPDATE
of DELETE
instructie, afhankelijk van de mogelijkheden van de gegevensprovider. Hoewel de query meerdere resultatensets kan retourneren, retourneert OPENROWSET
slechts de eerste.
Tip
Gebruik in plaats daarvan gekoppelde servers voor frequentere verwijzingen naar externe gegevensbronnen. Zie Gekoppelde servers (Database Engine)voor meer informatie.
OPENROWSET
zonder de BULK
operator is alleen beschikbaar op SQL Server. Details en koppelingen naar vergelijkbare voorbeelden op andere platforms:
-
OPENROWSET
biedt ondersteuning voor bulkbewerkingen via een ingebouwde provider op veel Database Engine-platformsBULK
, waaronder SQL Server, Azure SQL Database, Azure SQL Managed Instance en Microsoft Fabric Data Warehouse. Zie OPENROWSET BULK (Transact-SQL)voor meer informatie. - Zie OpenROWSET gebruiken met behulp van een serverloze SQL-pool in Azure Synapse Analyticsvoor informatie en voorbeelden van serverloze SQL-pools in Azure Synapse Analytics. Toegewezen SQL-pools in Azure Synapse bieden geen ondersteuning voor de
OPENROWSET
-functie.
Transact-SQL syntaxisconventies
Syntax
OPENROWSET
syntaxis wordt gebruikt om een query uit te voeren op externe gegevensbronnen:
OPENROWSET
( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password' | 'provider_string' }
, { [ catalog. ] [ schema. ] object | 'query' }
)
Arguments
'provider_name'
Een tekenreeks die de beschrijvende naam (of PROGID
) van de gegevensprovider vertegenwoordigt, zoals opgegeven in het register.
provider_name heeft geen standaardwaarde. Voorbeelden van providernamen zijn MSOLEDBSQL
, Microsoft.Jet.OLEDB.4.0
of MSDASQL
.
'datasource'
Een tekenreeksconstante die overeenkomt met een bepaalde gegevensbron.
gegevensbron is de DBPROP_INIT_DATASOURCE
eigenschap die moet worden doorgegeven aan de IDBProperties
-interface van de provider om de provider te initialiseren. Deze tekenreeks bevat doorgaans de naam van het databasebestand, de naam van een databaseserver of een naam die de provider begrijpt voor het zoeken naar de database of databases.
De gegevensbron kan een bestandspad zijn C:\SAMPLES\Northwind.mdb'
voor Microsoft.Jet.OLEDB.4.0
provider of verbindingsreeks Server=Seattle1;Trusted_Connection=yes;
voor MSOLEDBSQL
provider.
'user_id'
Een tekenreeksconstante die de gebruikersnaam is die wordt doorgegeven aan de opgegeven gegevensprovider.
user_id geeft de beveiligingscontext voor de verbinding op en wordt doorgegeven als de eigenschap DBPROP_AUTH_USERID
om de provider te initialiseren.
user_id kan geen microsoft Windows-aanmeldingsnaam zijn.
'password'
Een tekenreeksconstante die het gebruikerswachtwoord is dat moet worden doorgegeven aan de gegevensprovider.
wachtwoord wordt doorgegeven als de eigenschap DBPROP_AUTH_PASSWORD
bij het initialiseren van de provider.
wachtwoord kan geen Microsoft Windows-wachtwoord zijn. For example:
SELECT a.* FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\SAMPLES\Northwind.mdb';
'<user name>';
'<password>',
Customers
) AS a;
'provider_string'
Een providerspecifieke verbindingsreeks die wordt doorgegeven als de eigenschap DBPROP_INIT_PROVIDERSTRING
om de OLE DB-provider te initialiseren.
provider_string bevat doorgaans alle verbindingsgegevens die nodig zijn om de provider te initialiseren.
Zie voor een lijst met trefwoorden die de OLE DB-provider van sql Server Native Client herkent initialisatie- en autorisatie-eigenschappen (Native Client OLE DB Provider). De SQL Server Native Client (vaak afgekort SNAC) is verwijderd uit SQL Server 2022 (16.x) en SQL Server Management Studio 19 (SSMS). Zowel de SQL Server Native Client OLE DB-provider (SQLNCLI of SQLNCLI11) als de verouderde Microsoft OLE DB-provider voor SQL Server (SQLOLEDB) worden niet aanbevolen voor nieuwe ontwikkeling. Schakel over naar het nieuwe Microsoft OLE DB-stuurprogramma (MSOLEDBSQL) voor SQL Server.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
Department
) AS d;
[ catalog. ] [ schema. ] object
Externe tabel of weergave met de gegevens die OPENROWSET
moeten lezen. Het kan een driedelige naamobject zijn met de volgende onderdelen:
- catalogus (optioneel): de naam van de catalogus of database waarin het opgegeven object zich bevindt.
- schema (optioneel): de naam van het schema of de objecteigenaar voor het opgegeven object.
- object: de objectnaam waarmee het object uniek wordt geïdentificeerd.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
AdventureWorks2022.HumanResources.Department
) AS d;
'query'
Een tekenreeksconstante die door de provider wordt verzonden en uitgevoerd. De lokale instantie van SQL Server verwerkt deze query niet, maar verwerkt queryresultaten die door de provider worden geretourneerd, een passthrough-query. Passthrough-query's zijn handig wanneer ze worden gebruikt voor providers die hun tabelgegevens niet beschikbaar maken via tabelnamen, maar alleen via een opdrachttaal. Passthrough-query's worden ondersteund op de externe server, zolang de queryprovider het OLE DB-opdrachtobject en de verplichte interfaces ondersteunt.
Zie OLE DB-interfaces (SQL Server Native Client)voor meer informatie.
SELECT a.*
FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
'SELECT TOP 10 GroupName, Name FROM AdventureWorks2022.HumanResources.Department'
) AS a;
Remarks
OPENROWSET
kan alleen worden gebruikt voor toegang tot externe gegevens uit OLE DB-gegevensbronnen wanneer de registeroptie DisallowAdhocAccess expliciet is ingesteld op 0 voor de opgegeven provider en de geavanceerde configuratieoptie Ad Hoc gedistribueerde query's is ingeschakeld. Wanneer deze opties niet zijn ingesteld, is het standaardgedrag niet toegestaan voor ad-hoctoegang.
Wanneer u externe OLE DB-gegevensbronnen opent, wordt de aanmeldings-id van vertrouwde verbindingen niet automatisch gedelegeerd vanaf de server waarop de client is verbonden met de server waarop een query wordt uitgevoerd. Verificatiedelegering moet worden geconfigureerd.
Catalogus- en schemanamen zijn vereist als de gegevensprovider ondersteuning biedt voor meerdere catalogi en schema's in de opgegeven gegevensbron. Waarden voor catalog
en schema
kunnen worden weggelaten wanneer de gegevensprovider deze niet ondersteunt. Als de provider alleen schemanamen ondersteunt, moet een tweedelige naam van het formulier schema.object
worden opgegeven. Als de provider alleen catalogusnamen ondersteunt, moet er een driedelige naam van het formulier catalog.schema.object
worden opgegeven. Zie Transact-SQL syntaxisconventiesvoor meer informatie.
Namen van drie delen zijn vereist voor passthrough-query's die gebruikmaken van de OLE DB-provider van sql Server Native Client.
OPENROWSET
accepteert geen variabelen voor de argumenten.
Elke aanroep van OPENDATASOURCE
, OPENQUERY
of OPENROWSET
in de FROM
component wordt afzonderlijk en onafhankelijk van elke aanroep naar deze functies die worden gebruikt als doel van de update, zelfs als identieke argumenten aan de twee aanroepen worden verstrekt. Met name filter- of joinvoorwaarden die zijn toegepast op het resultaat van een van deze aanroepen, hebben geen invloed op de resultaten van de andere.
Permissions
OPENROWSET
machtigingen worden bepaald door de machtigingen van de gebruikersnaam die wordt doorgegeven aan de gegevensprovider.
Limitations
Niet ondersteund met microsoft Access Database Engine-stuurprogramma.
Examples
In deze sectie vindt u algemene voorbeelden om te laten zien hoe u OPENROWSET gebruikt.
De SQL Server Native Client (vaak afgekort SNAC) is verwijderd uit SQL Server 2022 (16.x) en SQL Server Management Studio 19 (SSMS). Zowel de SQL Server Native Client OLE DB-provider (SQLNCLI of SQLNCLI11) als de verouderde Microsoft OLE DB-provider voor SQL Server (SQLOLEDB) worden niet aanbevolen voor nieuwe ontwikkeling. Schakel over naar het nieuwe Microsoft OLE DB-stuurprogramma (MSOLEDBSQL) voor SQL Server.
A. OPENROWSET gebruiken met SELECT en de OLE DB-provider van de SQL Server-client
In het volgende voorbeeld wordt de OLE DB-provider van sql Server Native Client gebruikt voor toegang tot de HumanResources.Department
tabel in de AdventureWorks2022
-database op de externe server Seattle1
. (Gebruik MSOLEDBSQL
dit voor de moderne Microsoft SQL Server OLE DB-gegevensprovider die is vervangen SQLNCLI
.) Er wordt een SELECT
instructie gebruikt om de geretourneerde rijset te definiëren. De providertekenreeks bevat de Server
en Trusted_Connection
trefwoorden. Deze trefwoorden worden herkend door de OLE DB-provider van sql Server Native Client.
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. De Microsoft OLE DB-provider voor Jet gebruiken
In het volgende voorbeeld wordt de Customers
tabel in de Microsoft Access Northwind
-database geopend via de Microsoft OLE DB-provider voor Jet.
Note
In dit voorbeeld wordt ervan uitgegaan dat Microsoft Access is geïnstalleerd. Als u dit voorbeeld wilt uitvoeren, moet u de Northwind
-database installeren.
SELECT CustomerID, CompanyName
FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',
Customers
);
C. OPENROWSET en een andere tabel in een INNER JOIN gebruiken
In het volgende voorbeeld worden alle gegevens uit de Customers
tabel geselecteerd uit het lokale exemplaar van de SQL Server-database Northwind
en uit de Orders
tabel uit de Microsoft Access-database Northwind
die is opgeslagen op dezelfde computer.
Note
In dit voorbeeld wordt ervan uitgegaan dat Microsoft Access is geïnstalleerd. Als u dit voorbeeld wilt uitvoeren, moet u de Northwind
-database installeren.
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;