Saat menjalankan pernyataan UPDATE melalui linked server SQL Server, SQL Server menarik semua baris yang sesuai dari server remote ke instans lokal untuk diproses, lalu menuliskan kembali perubahannya. Proses bolak-balik inilah yang menyebabkan operasi UPDATE menjadi lambat melalui linked server, meskipun pernyataan SELECT berjalan cepat—SELECT memungkinkan server remote melakukan filter dan hanya mengembalikan baris hasilnya, sehingga volume data yang dikirim melalui jaringan jauh lebih sedikit.
Solusi
Jalankan logika UPDATE di server remote alih-alih menarik datanya ke lokal. Terdapat dua pendekatan yang dapat digunakan:
Opsi 1: Bungkus UPDATE sebagai prosedur tersimpan remote
Buat prosedur tersimpan di server remote yang berisi logika UPDATE, lalu panggil melalui linked server menggunakan sintaks nama empat bagian (four-part name).
-- Panggil prosedur tersimpan remote menggunakan sintaks nama empat bagian
DECLARE @return_status INT;
EXEC @return_status = <linked_server_name>.<database_name>.<schema_name>.<procedure_name>
@param1 = <value1>;Cara ini memastikan UPDATE dijalankan di server remote. Prosedur tersimpan tersebut harus sudah ada di instans SQL Server remote.
Untuk daftar prosedur tersimpan yang didukung oleh ApsaraDB RDS for SQL Server, lihat Stored procedures.
Opsi 2: Gunakan OPENQUERY untuk UPDATE dengan transmisi langsung
OPENQUERY mengirim kueri langsung ke linked server untuk dieksekusi. UPDATE dijalankan sepenuhnya di server remote tanpa mentransfer data ke instans lokal.
UPDATE OPENQUERY (<linked_server_name>, 'SELECT <column> FROM <schema>.<table> WHERE <condition>')
SET <column> = <new_value>;| Placeholder | Deskripsi | Contoh |
|---|---|---|
<linked_server_name></linked_server_name> | Nama server yang ditautkan | RemoteSvr |
<schema>.<table> | Tabel remote yang akan diperbarui | dbo.orders |
<condition> | Filter untuk mengidentifikasi baris target | id = 101 |
<new_value> | Nilai yang akan diatur | 'processed' |
Untuk sintaks lengkap OPENQUERY dan contoh tambahan, lihat OPENQUERY (Transact-SQL).
Berlaku untuk
ApsaraDB RDS for SQL Server