Apa itu "permintaan heterogen"?

14

Saya mendapat pesan kesalahan berikut tentang permintaan SQL yang saya jalankan dalam sebuah program. SQL Server 2005 T-SQL.

Kueri heterogen membutuhkan ANSI_NULLSdan ANSI_WARNINGSopsi yang akan ditetapkan untuk koneksi. Ini memastikan semantik kueri yang konsisten. Aktifkan opsi ini dan kemudian ulang permintaan Anda. (keparahan 16)

Memperbaiki itu mudah, diatur ANSI_NULLSdan ANSI_WARNINGS ON, tapi saya ingin tahu apa itu permintaan heterogen. Pencarian Google menampilkan puluhan hasil yang memberitahu saya untuk mengatur ANSI_NULLSdan ANSI_WARNINGS, tidak ada yang menjelaskan apa arti istilah itu. Pertanyaannya adalah:

UPDATE SRV.DB.DBO.TABLE SET Column=
            (SELECT Column 
            FROM SRV1.DB.DBO.TABLE)

Saya pikir ini karena menghubungkan ke beberapa mesin basis data dalam satu permintaan, karena saya tidak pernah mendapatkan kesalahan ini sebaliknya.
Apakah "Heterogen" hanya merujuk pada permintaan dua mesin basis data yang berbeda dalam konteks ini?

Ben Brocka
sumber

Jawaban:

8

Apakah "Heterogen" hanya merujuk pada permintaan dua mesin basis data yang berbeda dalam konteks ini?

Pada dasarnya ya. Permintaan "heterogen" dijalankan pada "server tertaut heterogen". Semua kueri ke server yang ditautkan ini akan heterogen.

Dan "heterogen" adalah bagian dari kueri yang didistribusikan

  • Data terdistribusi disimpan dalam beberapa contoh SQL Server.
  • Data heterogen disimpan dalam berbagai sumber data relasional dan non-relasional yang diakses dengan menggunakan penyedia OLE DB.

Tapi "heterogen" muncul sesekali:

Lihat menghubungkan server di MSDN

Kemampuan untuk mengeluarkan kueri terdistribusi, pembaruan, perintah, dan transaksi pada sumber data yang heterogen di seluruh perusahaan.

sp_addlinkedserver

Server tertaut memungkinkan akses ke kueri terdistribusi dan heterogen terhadap sumber data OLE DB.

Dan contoh MSDN dari kueri Direktori Aktif di "Bergabung dengan Data Heterogen"

Dan MSDN lagi "Replikasi Database Heterogen"

gbn
sumber
6

Sepengetahuan saya, ya.

Masalah yang saya lihat dengan permintaan Anda adalah Anda tidak memiliki cara untuk mengetahui baris apa yang akan kembali dari tabel tertaut Anda. Apakah ini hanya kode boneka atau apakah permintaan Anda ditulis dengan cara ini?

mrdenny
sumber
Ini kode dummy, ada satu kolom yang saya ambil dari 40 database dan menyimpan ke dalam tabel "laporan status" hanya dari nilai-nilai itu.
Ben Brocka
1
Oh oke. Hanya ingin memastikan Anda menyadari bahwa nilai yang dimasukkan ke dalam kolom itu di Srv.db.dbo.table bisa berbeda tergantung pada versi SQL Server Anda menjalankan kode. Khususnya dari SQL 2005 hingga SQL 2008 menggunakan kode yang diposkan Anda akan mendapatkan nilai yang berbeda.
mrdenny
Sekarang Anda membuat saya tertarik, apa potensi masalahnya, hanya saja saya tidak tahu baris apa yang saya dapat? Tabel hanya memiliki satu baris dalam kasus ini yang mengapa tidak ada WHERE di subquery.
Ben Brocka
Jika ada beberapa baris dalam tabel, dengan SQL 2005 Anda mendapatkan baris pertama. Dengan SQL 2008 tabel baru akan mendapatkan baris kedua. (Saya mungkin memilikinya mundur.)
mrdenny
Saya akan sangat menyukai artikel dari MS yang menjelaskan apa sebenarnya "permintaan heterogen" sebenarnya tetapi sepertinya hal seperti itu tidak ada jadi saya menandai ini dengan benar.
Ben Brocka
1

Heterogen artinya berbeda. Jadi permintaan yang heterogen ada dalam satu basis data dan meminta basis data yang BERBEDA. Karena database berbeda, maka memunculkan kemungkinan pengaturan menjadi berbeda yang dapat menyebabkan hasil yang berbeda dari yang dimaksudkan.

Robert Harrison
sumber