Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 INSERT
pernyataan , , UPDATE
atau 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:
-
OPENROWSET
mendukung operasi massal melalui penyedia bawaanBULK
di banyak platform Mesin Database, termasuk Azure dan Microsoft Fabric. Untuk informasi selengkapnya, lihat OPENROWSET MASSAL (Transact-SQL). - Untuk contoh tentang Azure SQL Managed Instance, lihat Mengkueri sumber data menggunakan OPENROWSET.
- Azure SQL Database hanya mendukung OPENROWSET BULK (Transact-SQL).
- Untuk informasi dan contoh dengan kumpulan SQL tanpa server di Azure Synapse, lihat Cara menggunakan OPENROWSET menggunakan kumpulan SQL tanpa server di Azure Synapse Analytics. Kumpulan SQL khusus di Azure Synapse tidak mendukung fungsi tersebut
OPENROWSET
.
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.0
atau 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 Seattle1
jarak 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;