Bagikan melalui


OPENROWSET (T-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru

OPENROWSET adalah alternatif untuk mengakses tabel di server tertaut dan merupakan metode ad hoc satu kali untuk menyambungkan dan mengakses data jarak jauh. Perintah OPENROWSET T-SQL menyertakan semua informasi koneksi yang diperlukan untuk mengakses data jarak jauh dari sumber data eksternal.

Fungsi OPENROWSET dapat dirujuk dalam FROM klausa kueri seolah-olah itu adalah nama tabel. Fungsi ini OPENROWSET juga dapat dirujuk sebagai tabel target dari INSERTpernyataan , , UPDATEatau DELETE , yang tunduk pada kemampuan penyedia data. Meskipun kueri mungkin mengembalikan beberapa kumpulan hasil, OPENROWSET hanya mengembalikan yang pertama.

Petunjuk / Saran

Untuk referensi yang lebih sering ke sumber data eksternal, gunakan server tertaut sebagai gantinya. Untuk informasi selengkapnya, lihat Server Tertaut (Mesin Database).

OPENROWSET BULK tanpa operator hanya tersedia di SQL Server. Detail dan tautan ke contoh serupa di platform lain:

Konvensi sintaks transact-SQL

Sintaks

OPENROWSET sintaks digunakan untuk mengkueri sumber data eksternal:

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

Argumen

'provider_name'

String karakter yang mewakili nama yang mudah diingat (atau PROGID) dari penyedia data seperti yang ditentukan dalam registri. provider_name tidak memiliki nilai default. Contoh nama penyedia adalah MSOLEDBSQL, , Microsoft.Jet.OLEDB.4.0atau MSDASQL.

'sumber data'

Konstanta string yang sesuai dengan sumber data tertentu. sumber data adalah properti yang DBPROP_INIT_DATASOURCE akan diteruskan ke IDBProperties antarmuka penyedia untuk menginisialisasi penyedia. Biasanya, string ini mencakup nama file database, nama server database, atau nama yang dipahami penyedia untuk menemukan database atau database.

Sumber data dapat berupa jalur C:\SAMPLES\Northwind.mdb' file untuk Microsoft.Jet.OLEDB.4.0 penyedia, atau string koneksi Server=Seattle1;Trusted_Connection=yes; untuk MSOLEDBSQL penyedia.

'user_id'

Konstanta string yang merupakan nama pengguna diteruskan ke penyedia data yang ditentukan. user_id menentukan konteks keamanan untuk koneksi dan diteruskan sebagai DBPROP_AUTH_USERID properti untuk menginisialisasi penyedia. user_id tidak dapat menjadi nama masuk Microsoft Windows.

'kata sandi'

Konstanta string yang merupakan kata sandi pengguna yang akan diteruskan ke penyedia data. kata sandi diteruskan sebagai DBPROP_AUTH_PASSWORD properti saat menginisialisasi penyedia. kata sandi tidak dapat berupa kata sandi Microsoft Windows. Misalnya:

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

'provider_string'

String koneksi khusus penyedia yang diteruskan sebagai DBPROP_INIT_PROVIDERSTRING properti untuk menginisialisasi penyedia OLE DB. provider_string biasanya merangkum semua informasi koneksi yang diperlukan untuk menginisialisasi penyedia.

Untuk daftar kata kunci yang dikenal penyedia OLE DB Klien Asli SQL Server, lihat Properti Inisialisasi dan Otorisasi (Penyedia OLE DB Klien Asli). SQL Server Native Client (sering disingkat SNAC) telah dihapus dari SQL Server 2022 (16.x) dan SQL Server Management Studio 19 (SSMS). Penyedia SQL Server Native Client OLE DB (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan baru. Beralih ke Microsoft OLE DB Driver (MSOLEDBSQL) baru untuk SQL Server ke depannya.

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

[ katalog . ] [ skema . ] objek

Tabel atau tampilan jarak jauh yang berisi data yang OPENROWSET harus dibaca. Ini bisa menjadi objek tiga bagian-nama dengan komponen berikut:

  • katalog (opsional) - nama katalog atau database tempat objek yang ditentukan berada.
  • skema (opsional) - nama skema atau pemilik objek untuk objek yang ditentukan.
  • objek - nama objek yang secara unik mengidentifikasi objek untuk dikerjakan.
SELECT d.* FROM OPENROWSET(
    'MSOLEDBSQL',
    'Server=Seattle1;Trusted_Connection=yes;',
    AdventureWorks2022.HumanResources.Department
) AS d;

'kueri'

Konstanta string dikirim ke dan dijalankan oleh penyedia. Instans lokal SQL Server tidak memproses kueri ini, tetapi memproses hasil kueri yang dikembalikan oleh penyedia, kueri pass-through. Kueri pass-through berguna saat digunakan pada penyedia yang tidak menyediakan data tabular mereka melalui nama tabel, tetapi hanya melalui bahasa perintah. Kueri pass-through didukung di server jarak jauh, selama penyedia kueri mendukung objek Perintah OLE DB dan antarmuka wajibnya.

Untuk informasi selengkapnya, lihat Antarmuka 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;

Keterangan

OPENROWSET dapat digunakan untuk mengakses data jarak jauh dari sumber data OLE DB hanya ketika opsi registri DisallowAdhocAccess secara eksplisit diatur ke 0 untuk penyedia yang ditentukan, dan opsi konfigurasi lanjutan Kueri Terdistribusi Ad Hoc diaktifkan. Saat opsi ini tidak diatur, perilaku default tidak memungkinkan akses ad hoc.

Saat Anda mengakses sumber data OLE DB jarak jauh, identitas masuk koneksi tepercaya tidak secara otomatis didelegasikan dari server tempat klien terhubung ke server yang sedang dikueri. Delegasi autentikasi harus dikonfigurasi.

Nama katalog dan skema diperlukan jika penyedia data mendukung beberapa katalog dan skema di sumber data yang ditentukan. Nilai untuk catalog dan schema dapat dihilangkan saat penyedia data tidak mendukungnya. Jika penyedia hanya mendukung nama skema, nama dua bagian formulir schema.object harus ditentukan. Jika penyedia hanya mendukung nama katalog, nama tiga bagian formulir catalog.schema.object harus ditentukan. Untuk informasi selengkapnya, lihat Konvensi sintaks t-SQL.

Nama tiga bagian diperlukan untuk kueri pass-through yang menggunakan penyedia SQL Server Native Client OLE DB.

OPENROWSET tidak menerima variabel untuk argumennya.

Setiap panggilan ke OPENDATASOURCE, OPENQUERY, atau OPENROWSET dalam FROM klausul dievaluasi secara terpisah dan independen dari panggilan apa pun ke fungsi-fungsi ini yang digunakan sebagai target pembaruan, bahkan jika argumen identik diberikan ke dua panggilan. Secara khusus, kondisi filter atau gabungan yang diterapkan pada hasil salah satu panggilan tersebut tidak berpengaruh pada hasil yang lain.

Izin

OPENROWSET izin ditentukan oleh izin nama pengguna yang sedang diteruskan ke penyedia data.

Contoh

Bagian ini menyediakan contoh umum untuk menunjukkan cara menggunakan OPENROWSET.

Catatan

Untuk contoh yang menunjukkan penggunaan INSERT...SELECT * FROM OPENROWSET(BULK...), lihat OPENROWSET BULK (Transact-SQL).

SQL Server Native Client (sering disingkat SNAC) telah dihapus dari SQL Server 2022 (16.x) dan SQL Server Management Studio 19 (SSMS). Penyedia SQL Server Native Client OLE DB (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan baru. Beralih ke Microsoft OLE DB Driver (MSOLEDBSQL) baru untuk SQL Server ke depannya.

J. Menggunakan OPENROWSET dengan SELECT dan Penyedia SQL Server Native Client OLE DB

Contoh berikut menggunakan penyedia SQL Server Native Client OLE DB untuk mengakses HumanResources.Department tabel dalam AdventureWorks2022 database di server Seattle1jarak jauh . (Gunakan MSOLEDBSQL untuk Penyedia Data Microsoft SQL Server OLE DB modern yang menggantikan SQLNCLI.) Pernyataan SELECT digunakan untuk menentukan kumpulan baris yang dikembalikan. String penyedia berisi Server kata kunci dan Trusted_Connection . Kata kunci ini dikenali oleh penyedia SQL Server Native Client OLE DB.

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. Menggunakan Penyedia Microsoft OLE DB untuk Jet

Contoh berikut mengakses Customers tabel dalam database Microsoft Access Northwind melalui Penyedia Microsoft OLE DB untuk Jet.

Catatan

Contoh ini mengasumsikan bahwa Microsoft Access diinstal. Untuk menjalankan contoh ini, Anda harus menginstal Northwind database.

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

C. Menggunakan OPENROWSET dan tabel lain dalam INNER JOIN

Contoh berikut memilih semua data dari Customers tabel dari instans lokal database SQL Server Northwind dan dari Orders tabel dari database Microsoft Access Northwind yang disimpan di komputer yang sama.

Catatan

Contoh ini mengasumsikan bahwa Microsoft Access diinstal. Untuk menjalankan contoh ini, Anda harus menginstal Northwind database.

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;