Udostępnij za pośrednictwem


OPENROWSET (Transact-SQL)

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje

OPENROWSET jest alternatywą dla uzyskiwania dostępu do tabel na serwerze połączonym i jest jednorazową metodą ad hoc łączenia i uzyskiwania dostępu do danych zdalnych. Polecenie OPENROWSET języka T-SQL zawiera wszystkie informacje o połączeniu wymagane do uzyskiwania dostępu do danych zdalnych z zewnętrznego źródła danych.

Funkcję OPENROWSET można odwołać w klauzuli FROM zapytania tak, jakby była to nazwa tabeli. Funkcję OPENROWSET można również przywoływać jako tabelę docelową INSERTinstrukcji , UPDATElub DELETE , z zastrzeżeniem możliwości dostawcy danych. Chociaż zapytanie może zwrócić wiele zestawów wyników, OPENROWSET zwraca tylko pierwszy zestaw wyników.

Tip

Aby częściej odwoływać się do zewnętrznych źródeł danych, użyj serwerów połączonych. Aby uzyskać więcej informacji, zobacz połączone serwery (aparat bazy danych).

OPENROWSET BULK bez operatora jest dostępny tylko w programie SQL Server. Szczegóły i linki do podobnych przykładów na innych platformach:

Transact-SQL konwencje składni

Syntax

OPENROWSET składnia służy do wykonywania zapytań dotyczących zewnętrznych źródeł danych:

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

Arguments

'provider_name'

Ciąg znaków reprezentujący przyjazną nazwę (lub PROGID) dostawcy danych, jak określono w rejestrze. provider_name nie ma wartości domyślnej. Przykłady nazw dostawców to MSOLEDBSQL, Microsoft.Jet.OLEDB.4.0lub MSDASQL.

'datasource'

Stała ciągu odpowiadająca określonemu źródle danych. źródła danych jest właściwość DBPROP_INIT_DATASOURCE, która ma zostać przekazana do interfejsu IDBProperties dostawcy w celu zainicjowania dostawcy. Zazwyczaj ten ciąg zawiera nazwę pliku bazy danych, nazwę serwera bazy danych lub nazwę, którą dostawca rozumie podczas lokalizowania bazy danych lub baz danych.

Źródło danych może być ścieżką pliku C:\SAMPLES\Northwind.mdb' dla dostawcy Microsoft.Jet.OLEDB.4.0 lub parametrami połączenia Server=Seattle1;Trusted_Connection=yes; dla dostawcy MSOLEDBSQL.

'user_id'

Stała ciągu, która jest nazwą użytkownika przekazaną do określonego dostawcy danych. user_id określa kontekst zabezpieczeń połączenia i jest przekazywany jako właściwość DBPROP_AUTH_USERID, aby zainicjować dostawcę. user_id nie może być nazwą logowania systemu Microsoft Windows.

'password'

Stała ciągu, która jest hasłem użytkownika, który ma zostać przekazany do dostawcy danych. hasło jest przekazywane jako właściwość DBPROP_AUTH_PASSWORD podczas inicjowania dostawcy. hasła nie może być hasłem systemu Microsoft Windows. For example:

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

'provider_string'

Parametry połączenia specyficzne dla dostawcy, które są przekazywane jako właściwość DBPROP_INIT_PROVIDERSTRING do inicjowania dostawcy OLE DB. provider_string zazwyczaj hermetyzuje wszystkie informacje o połączeniu wymagane do zainicjowania dostawcy.

Aby uzyskać listę słów kluczowych rozpoznawanych przez dostawcę OLE DB klienta natywnego programu SQL Server, zobacz Inicjowanie i właściwości autoryzacji (natywny dostawca OLE DB klienta natywnego). sql Server Native Client (często skrócony SNAC) został usunięty z programu SQL Server 2022 (16.x) i PROGRAMU SQL Server Management Studio 19 (SSMS). Zarówno dostawca OLE DB klienta natywnego programu SQL Server (SQLNCLI lub SQLNCLI11), jak i starszy dostawca MICROSOFT OLE DB dla programu SQL Server (SQLOLEDB) nie są zalecane w przypadku nowego programowania. Przejdź do nowego sterownika MICROSOFT OLE DB (MSOLEDBSQL) dla programu SQL Server w przyszłości.

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

[ catalog. ] [ schemat. ] object

Zdalna tabela lub widok zawierający dane, które OPENROWSET powinny być odczytywane. Może to być obiekt trzyczęściowy z następującymi składnikami:

  • katalogu (opcjonalnie) — nazwa katalogu lub bazy danych, w której znajduje się określony obiekt.
  • schemat (opcjonalnie) — nazwa właściciela schematu lub obiektu dla określonego obiektu.
  • obiektu — nazwa obiektu, z którą jednoznacznie identyfikuje obiekt do pracy.
SELECT d.* FROM OPENROWSET(
    'MSOLEDBSQL',
    'Server=Seattle1;Trusted_Connection=yes;',
    AdventureWorks2022.HumanResources.Department
) AS d;

'query'

Stała ciągu wysyłana do dostawcy i wykonywana przez dostawcę. Lokalne wystąpienie programu SQL Server nie przetwarza tego zapytania, ale przetwarza wyniki zapytania zwrócone przez dostawcę — zapytanie przekazywane. Zapytania przekazywane są przydatne w przypadku dostawców, którzy nie udostępniają danych tabelarycznych za pomocą nazw tabel, ale tylko za pośrednictwem języka poleceń. Zapytania przekazywane są obsługiwane na serwerze zdalnym, o ile dostawca zapytań obsługuje obiekt polecenia OLE DB i jego obowiązkowe interfejsy.

Aby uzyskać więcej informacji, zobacz interfejsy 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;

Remarks

OPENROWSET można użyć do uzyskiwania dostępu do danych zdalnych ze źródeł danych OLE DB tylko wtedy, gdy opcja rejestru DisallowAdhocAccess jest jawnie ustawiona na wartość 0 dla określonego dostawcy, a opcja zaawansowana konfiguracji zapytań rozproszonych ad hoc jest włączona. Jeśli te opcje nie są ustawione, domyślne zachowanie nie zezwala na dostęp ad hoc.

Gdy uzyskujesz dostęp do zdalnych źródeł danych OLE DB, tożsamość logowania zaufanych połączeń nie jest automatycznie delegowana z serwera, na którym klient jest połączony z serwerem, do którego jest wykonywane zapytanie. Należy skonfigurować delegowanie uwierzytelniania.

Nazwy wykazu i schematu są wymagane, jeśli dostawca danych obsługuje wiele katalogów i schematów w określonym źródle danych. Wartości dla catalog i schema można pominąć, gdy dostawca danych ich nie obsługuje. Jeśli dostawca obsługuje tylko nazwy schematów, należy określić dwuczęściową nazwę formularza schema.object . Jeśli dostawca obsługuje tylko nazwy wykazu, należy określić trzyczęściową nazwę formularza catalog.schema.object . Aby uzyskać więcej informacji, zobacz Transact-SQL konwencje składni.

Trzyczęściowe nazwy są wymagane w przypadku zapytań przekazywanych korzystających z dostawcy OLE DB klienta natywnego programu SQL Server.

OPENROWSET nie akceptuje zmiennych dla argumentów.

Każde wywołanie OPENDATASOURCE, OPENQUERYlub OPENROWSET w klauzuli FROM jest oceniane oddzielnie i niezależnie od dowolnego wywołania tych funkcji używanych jako element docelowy aktualizacji, nawet jeśli do dwóch wywołań są dostarczane identyczne argumenty. W szczególności warunki filtrowania lub sprzężenia zastosowane w wyniku jednego z tych wywołań nie mają wpływu na wyniki drugiego.

Permissions

OPENROWSET uprawnienia są określane przez uprawnienia nazwy użytkownika przekazywanej do dostawcy danych.

Limitations

Sterownik aparatu bazy danych programu Microsoft Access nie jest obsługiwany.

Examples

Ta sekcja zawiera ogólne przykłady, aby zademonstrować sposób używania zestawu OPENROWSET.

Note

Przykłady pokazujące użycie INSERT...SELECT * FROM OPENROWSET(BULK...)metody można znaleźć w temacie OPENROWSET BULK (Transact-SQL).

sql Server Native Client (często skrócony SNAC) został usunięty z programu SQL Server 2022 (16.x) i PROGRAMU SQL Server Management Studio 19 (SSMS). Zarówno dostawca OLE DB klienta natywnego programu SQL Server (SQLNCLI lub SQLNCLI11), jak i starszy dostawca MICROSOFT OLE DB dla programu SQL Server (SQLOLEDB) nie są zalecane w przypadku nowego programowania. Przejdź do nowego sterownika MICROSOFT OLE DB (MSOLEDBSQL) dla programu SQL Server w przyszłości.

A. Używanie zestawu OPENROWSET z funkcją SELECT i dostawcą OLE DB klienta natywnego programu SQL Server

W poniższym przykładzie użyto dostawcy OLE DB klienta natywnego programu SQL Server w celu uzyskania dostępu do tabeli HumanResources.Department w bazie danych AdventureWorks2022 na serwerze zdalnym Seattle1. (Użyj MSOLEDBSQL dla nowoczesnego dostawcy danych OLE DB programu Microsoft SQL Server, który zastąpił plik SQLNCLI). Instrukcja SELECT służy do definiowania zwracanego zestawu wierszy. Ciąg dostawcy zawiera słowa kluczowe Server i Trusted_Connection. Te słowa kluczowe są rozpoznawane przez dostawcę OLE DB klienta natywnego programu 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. Korzystanie z dostawcy Microsoft OLE DB dla rozwiązania Jet

Poniższy przykład uzyskuje dostęp do tabeli Customers w bazie danych usługi Microsoft Access Northwind za pośrednictwem dostawcy Microsoft OLE DB dla narzędzia Jet.

Note

W tym przykładzie przyjęto założenie, że program Microsoft Access jest zainstalowany. Aby uruchomić ten przykład, należy zainstalować bazę danych Northwind.

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

C. Używanie zestawu OPENROWSET i innej tabeli w sprzężenia wewnętrznego

Poniższy przykład wybiera wszystkie dane z Customers tabeli z lokalnego wystąpienia bazy danych programu SQL Server Northwind i z Orders tabeli z bazy danych programu Microsoft Access Northwind przechowywanej na tym samym komputerze.

Note

W tym przykładzie przyjęto założenie, że program Microsoft Access jest zainstalowany. Aby uruchomić ten przykład, należy zainstalować bazę danych Northwind.

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;