Bagikan melalui


Prosesor Kueri

Kueri Terdistribusi SQL Server untuk DB2

Kueri Terdistribusi di SQL Server menyediakan akses bersamaan terdistribusi ke beberapa sumber data. Prosesor Kueri Terdistribusi (DQP) memungkinkan Anda membuat kueri heterogen yang menggabungkan tabel di SQL Server dengan tabel di DB2, sistem File Host, Oracle, atau sumber data lain yang dapat diakses oleh penyedia OLE DB. Anda dapat menggunakan DQP untuk membuat tampilan SQL Server atas tabel DB2 sehingga pengembang dapat menulis langsung ke SQL Server dan mengintegrasikan data berbasis Windows dan berbasis host dalam aplikasi mereka.

Diagram berikut menunjukkan arsitektur DQP untuk mengakses data dengan Host Integration Server (HIS).

HIS_DQP_SQLServer

Untuk mengakses data dari sumber data OLE DB, SQL Server memerlukan informasi berikut:

  1. Nama penyedia OLE DB

  2. Informasi koneksi dalam bentuk string inisialisasi OLE DB

  3. Nama tabel atau string kueri SQL

  4. Kredensial otorisasi

    Anda dapat mereferensikan sumber data heterogen menggunakan salah satu dari tiga metode:

  5. Nama Ad Hoc

  6. Nama Server Terhubung

  7. Pass-Through Kueri

Kueri Nama Sementara

Nama ad hoc digunakan untuk kueri yang jarang dilakukan terhadap sumber data OLE DB yang tidak ditetapkan sebagai server tertaut. Di SQL Server, fungsi OPENROWSET dan OPENDATASOURCE menyediakan informasi koneksi untuk mengakses data dari sumber data OLE DB. Secara default, nama ad hoc tidak didukung. Opsi penyedia DisallowAdhocAccess harus diatur ke 0 dan opsi konfigurasi lanjutan Kueri Terdistribusi Ad Hoc harus diaktifkan.

Fragmen kode berikut menampilkan sintaks untuk mengaktifkan kueri nama ad hoc.

-- Example of enabling Ad Hoc Name Query   
sp_configure 'show advanced options', 1;  
GO  
  
RECONFIGURE;  
GO  
  
sp_configure 'Ad Hoc Distributed Queries', 1;  
GO  
  
RECONFIGURE;  
GO  
  

Fragmen kode berikut menampilkan sintaks untuk membuat kueri ad hoc.

Perhatian

Contoh atau panduan ini mereferensikan informasi sensitif, seperti string koneksi atau nama pengguna dan kata sandi. Jangan pernah melakukan hardcode nilai-nilai ini dalam kode Anda, dan pastikan Anda melindungi data rahasia dengan menggunakan autentikasi paling aman yang tersedia. Untuk informasi selengkapnya, lihat dokumentasi berikut:

-- Example of OPENROWSET Ad Hoc Name Query  
SELECT * FROM OPENROWSET (  
'DB2OLEDB',  
'Provider=DB2OLEDB;User ID=HISDEMO;Password=HISDEMO;Initial Catalog=DSN1D037;Network Transport Library=TCPIP;Host CCSID=37;PC Code Page=1252;Network Address=SYS1;Network Port=446;Package Collection=MSPKG;Default Schema=NWIND;Units of Work=RUW;Default Qualifier=NWIND;DBMS Platform=DB2/z/OS;Use Early Metadata=False;Defer Prepare=False;DateTime As Char=False;Rowset Cache Size=0;Datetime As Date=False;AutoCommit=True;Authentication=Server;Persist Security Info=True;Cache Authentication=False;Connection Pooling=False;Derive Parameters=False;',   
  
'SELECT * FROM NWIND.AREAS'  
  
);   
  
GO  
  
-- Example of OPENDATASOURCE Ad Hoc Name Query  
  
SELECT *  
FROM OPENDATASOURCE(  
     'DB2OLEDB',  
     'Provider=DB2OLEDB;User ID=PLARSEN;Password=PLARSEN;Initial Catalog=DSN1D037;Network Transport Library=TCP;Host CCSID=37;PC Code Page=1252;Network Address=sys1;Network Port=446;Package Collection=MSPKG;Default Schema=NWIND;Units of Work=RUW;Default Qualifier=NWIND;DBMS Platform=DB2/z/OS;Defer Prepare=False;Persist Security Info=True;Connection Pooling=False;Derive Parameters=False'  
     ).[DSN1D037].[NWIND].[AREAS]  
  

OPENROWSET dan OPENDATASOURCE harus digunakan hanya untuk mereferensikan sumber data OLE DB yang jarang diakses. Untuk sumber data apa pun yang akan diakses lebih dari beberapa kali, tentukan server tertaut. Baik OPENDATASOURCE maupun OPENROWSET tidak menyediakan seluruh fungsionalitas dari definisi server tertaut. Misalnya, OPENROWSET dan OPENDATASOURCE adalah makro dan tidak mendukung penyediaan variabel Transact-SQL sebagai argumen. Kueri nama ad hoc tidak menyertakan manajemen keamanan atau kemampuan untuk mengkueri informasi katalog. Setiap kali fungsi ini dipanggil, semua informasi koneksi, termasuk kata sandi, harus disediakan.

Mendefinisikan Server Tertaut

Anda dapat membuat nama server tertaut yang menentukan koneksi ke DB2 dengan menggunakan pernyataan Transact-SQL, atau melalui antarmuka pengguna SQL Server Management Studio.

Transact-SQL

Fragmen kode berikut menunjukkan sintaks Transact-SQL untuk menghilangkan, membuat, dan menentukan kredensial autentikasi untuk definisi nama server tertaut.

-- Example of dropping linked server by name   
  
EXEC sp_dropserver  
@server = 'DB2EXAMPLE',  
@droplogins = 'droplogins';   
  
GO  
  
-- Example of adding linked server by name  
  
EXEC sp_addlinkedserver   
  
@server = 'DB2EXAMPLE',   
  
@srvproduct = 'x''HIS',   
  
@provider = 'DB2OLEDB',   
  
@catalog = 'DSN1',   
  
@provstr = ‘Provider=DB2OLEDB;User ID=HISDEMO;Password=HISDEMO;Initial Catalog=DSN1D037;Network Transport Library=TCPIP;Host CCSID=37;PC Code Page=1252;Network Address=SYS1;Network Port=446;Package Collection=MSPKG;Default Schema=NWIND;Units of Work=RUW;Default Qualifier=NWIND;DBMS Platform=DB2/z/OS;Use Early Metadata=False;Defer Prepare=False;DateTime As Char=False;Rowset Cache Size=0;Datetime As Date=False;AutoCommit=True;Authentication=Server;Persist Security Info=True;Cache Authentication=False;Connection Pooling=False;Derive Parameters=False;';   
  
GO  
  
-- Example of adding linked server login  
  
EXEC sp_addlinkedsrvlogin   
     @rmtsrvname = 'DB2EXAMPLE',   
     @rmtuser = 'HISDEMO',   
     @rmtpassword = 'HISDEMO';   
  
GO  
  
-- Example of enabling pass-through queries  
  
EXEC sp_serveroption   
    @server =  'DB2EXAMPLE',  
    @optname =  'RPC OUT',  
    @optvalue =  'TRUE' ;   
  
GO  
  
-- Example of listing linked servers and options  
EXEC sp_linkedservers;  
GO  
EXEC sp_helpserver;  
GO  
  
-- Example of listing DB2 tables with restriction on schema name  
-- List DB2 columns with restrictions on table name  
  
EXEC sp_columns_ex  
   @table_server = 'DB2EXAMPLE',  
   @table_catalog = 'DSN1D037',  
   @table_schema = 'NWIND',  
   @table_name = 'ORDERS';   
  
GO  
  
-- Example of listing DB2 columns with restriction on schema and table names  
EXEC sp_columns_ex  
   @table_server = 'DB2EXAMPLE',  
   @table_catalog = 'DSN1D037',  
   @table_schema = 'NWIND',  
   @table_name = 'ORDERS';   
  
GO  
  
-- Example of linked server query (SELECT)   
  
SELECT * FROM DB2EXAMPLE.DSN1D037.NWIND.AREAS  
  
GO  
  
-- Example of linked server query (INSERT)   
  
INSERT INTO DB2EXAMPLE.DSN1D037.NWIND.AREAS VALUES (99999, 'Everywhere', 999)   
  
GO  
  
-- Example of linked server query (SELECT with WHERE clause)   
SELECT * FROM DB2EXAMPLE.DSN1D037.NWIND.AREAS WHERE REGIONID > 104  
GO  
-- Example of linked server query (UPDATE)   
  
UPDATE DB2EXAMPLE.DSN1D037.NWIND.AREAS SET AREADESC = 'Nowhere' WHERE AREAID = 99999  
  
GO  
  
-- Example of linked server query (SELECT with WHERE clause)   
SELECT * FROM DB2EXAMPLE.DSN1D037.NWIND.AREAS WHERE REGIONID > 104  
GO  
-- Example of linked server query (DELETE)   
  
DELETE FROM DB2EXAMPLE.DSN1D037.NWIND.AREAS WHERE AREAID = 99999  
  
GO   
  
-- Example of linked server query (SELECT with WHERE clause)   
SELECT * FROM DB2EXAMPLE.DSN1D037.NWIND.AREAS WHERE REGIONID > 104  
GO  
-- Example of linked server query (in a SQL Server VIEW)   
  
DROP VIEW QP_CustomerOrders  
  
GO  
  
CREATE VIEW QP_CustomerOrders  
AS  
SELECT * FROM DB2EXAMPLE.DSN1D037.NWIND.ORDERS  
  
GO  
  
SELECT * FROM QP_CustomerOrders  
  
GO  
  
-- Create SQL Server Stored Procedure to wrap Linked Server Query (SELECT with parameter)   
  
DROP PROCEDURE QP_SP_SelectAreaByAREAID  
  
GO  
  
CREATE PROCEDURE QP_SP_SelectAreaByAREAID  
    @MyArea integer   
AS   
SELECT * FROM DB2EXAMPLE.DSN1D037.NWIND.AREAS WHERE AREAID = @MyArea  
  
GO  
  
SP_HELP QP_SP_SelectAreaByAREAID  
  
GO  
  
DECLARE @return_value int  
  
EXEC @return_value = [dbo].[QP_SP_SelectAreaByAREAID]  
    @MyArea = 1581  
  
SELECT 'Return Value' = @return_value  
  
GO  
  
-- Four-part linked server query (INSERT with DUW transaction)  
--(Note: Requires updated Provider String (provstr) argument (Units of Work=DUW)   
  
SET XACT_ABORT ON  
BEGIN DISTRIBUTED TRAN  
INSERT INTO DB2EXAMPLE.DSN1D037.NWIND.AREAS VALUES ('99999', 'Everywhere', 999)  
COMMIT TRAN  
SET XACT_ABORT OFF  
  
-- Test table (SELECT)  
SELECT * FROM DB2EXAMPLE.DSN1D037.NWIND.AREAS  
  
-- Four-part linked server query (UPDATE with DUW transaction)  
SET XACT_ABORT ON  
BEGIN DISTRIBUTED TRAN  
UPDATE DB2EXAMPLE.DSN1D037.NWIND.AREAS SET AREADESC = 'Nowhere' WHERE AREAID = 99999  
COMMIT TRAN  
SET XACT_ABORT OFF  
  
-- Test table (SELECT)  
SELECT * FROM DB2EXAMPLE.DSN1D037.NWIND.AREAS  
  
-- Four-part linked server query (DELETE with DUW transaction)  
SET XACT_ABORT ON  
BEGIN DISTRIBUTED TRAN  
DELETE FROM DB2EXAMPLE.DSN1D037.NWIND.AREAS WHERE AREAID = 99999  
COMMIT TRAN  
SET XACT_ABORT OFF  
  
-- Test table (SELECT)  
SELECT * FROM DB2EXAMPLE.DSN1D037.NWIND.AREAS  
  

Kueri Langsung

SQL Server mengirim kueri pass-through sebagai string kueri yang tidak diinterpretasikan ke sumber data OLE DB. Kueri harus dalam sintaksis yang akan diterima sumber data OLE DB. Pernyataan Transact-SQL menggunakan hasil dari kueri pass-through seolah-olah itu adalah referensi tabel biasa. Argumen OPENROWSET dan OPENDATASOURCE tidak mendukung variabel. Argumen harus ditentukan sebagai string-literals. Jika variabel harus diteruskan sebagai argumen, string kueri yang berisi variabel dapat dibangun secara dinamis dan dijalankan dengan menggunakan pernyataan EXECUTE.

Fragmen kode berikut menampilkan sintaksis yang membuat kueri pass through.

-- Example of a pass through query (SELECT with parameters)   
  
DECLARE @AMOUNT DECIMAL(9,2);   
SET @AMOUNT = 99.99;  
EXECUTE ('SELECT * FROM NWIND.ORDERS WHERE AMOUNT = ?', @AMOUNT, 'Select') AT DB2EXAMPLE;   
  
GO  
  
-- Example of pass through query to execute DDL statement (DROP PROCEDURE)   
  
EXECUTE ('DROP PROCEDURE NWIND.CUSTORD', 'Drop') AT DB2EXAMPLE;   
  
GO  
  
-- Example of pass through query to execute DDL statement (CREATE PROCEDURE)   
  
EXECUTE ('CREATE PROCEDURE NWIND.CUSTORD (IN CUSTID INT) RESULT SETS 1 LANGUAGE SQL P1: BEGIN DECLARE CURSOR1 CURSOR WITH RETURN FOR SELECT * FROM NWIND.ORDERS WHERE CUSTID = CUSTORD.CUSTID ORDER BY ORDID ASC; OPEN CURSOR1; END P1', 'CreateProc') AT DB2EXAMPLE;   
  
GO  
  
-- Example of pass through query to execute CALL statement (with parameters)   
  
DECLARE @CUSTID INT;   
SET @CUSTID = 10001;  
EXEC ( 'CALL NWIND.CUSTORD(?)', @CUSTID)  AT DB2EXAMPLE;   
  
GO  
  

SQL Server Management Studio

Anda juga dapat menggunakan SQL Server Management Studio untuk menentukan pernyataan SELECT, INSERT, UPDATE, dan DELETE yang menggunakan empat bagian bernama kueri server tertaut. Kueri ini menyediakan sintaks Transact-SQL umum yang dapat digunakan melalui sumber data heterogen.

Ikuti langkah-langkah ini untuk menentukan server tertaut dari SQL Server Management Studio:

  1. Di Object Explorer, perluas Objek Server, klik folder Server Tertaut , lalu klik kanan pada Server Tertaut Baru.

  2. Dalam kotak dialog Server Tertaut Baru , masukkan Nama server tertaut seperti DB2EXAMPLE, dan pilih Penyedia Microsoft OLE DB untuk DB2 dari daftar Penyedia . Masukkan HIS di bidang Nama produk. Tempelkan string koneksi valid yang Anda tentukan menggunakan Alat Akses Data dan Wizard Sumber Data ke dalam bidang string Penyedia . Masukkan katalog DB2 ke bidang Lokasi .

  3. Di panel Pilih halaman, klik Keamanan dan pilih Dibuat menggunakan konteks keamanan ini. Masukkan nama pengguna DB2 yang valid di Masuk jarak jauh dan kata sandi di Dengan kata sandi.

  4. Di panel Pilih halaman, klik Opsi Server, klik RPC Keluar dan pilih Benar. Klik OK.

  5. Untuk menampilkan objek di server jarak jauh, perluas folder Server Tertaut , perluas Server Tertaut yang Anda tentukan, perluas Katalog, Tabel , dan Tampilan.

  6. Untuk membuat kueri, klik kanan pada tabel dan pilih tabel Skrip sebagai. Pilih PILIH ke dan pilih Jendela Editor Kueri Baru.

  7. Dari menu Kueri klik Jalankan (F5). Anda akan melihat baris data di panel Hasil.

    Anda juga dapat mengubah definisi server tertaut atau menggunakannya sebagai templat untuk membuat definisi server tertaut lainnya.

  8. Di Object Explorer, klik kanan Server Tertaut yang Anda tentukan sebelumnya. Pilih Server Tertaut Skrip sebagai, pilih DROP dan BUAT ke, dan klik Jendela Editor Kueri Baru.

  9. Edit pernyataan Transact-SQL dan klik Jalankan (F5) dari menu Kueri.

  10. Klik kanan Server Tertaut yang ditentukan ulang atau baru, lalu klik Uji Koneksi.

Lihat Juga

SQL Server