“Türdeş olmayan sorgu” nedir?


14

Bir programda çalıştırıyorum SQL sorgusu ile ilgili aşağıdaki hata mesajını aldım. SQL Server 2005 T-SQL.

Heterojen sorgular bağlantı için ANSI_NULLSve ANSI_WARNINGSseçeneklerinin ayarlanmasını gerektirir . Bu, tutarlı sorgu semantiği sağlar. Bu seçenekleri etkinleştirin ve ardından sorgunuzu yeniden yayınlayın. (önem derecesi 16)

Bunu düzeltmek kolay, set ANSI_NULLSve ANSI_WARNINGS ON, ama heterojen bir sorgu ne olduğunu bilmek istedim . Bir Google araması ayarlamak için bana sonuçların onlarca getirir ANSI_NULLSve ANSI_WARNINGShangi terimi araçları açıklayan hiçbir şey. Sorgu:

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

Ben başka türlü bu hatayı aldım gibi bu tek bir sorguda birden çok veritabanı motorlarına bağlanma nedeniyle olduğunu düşünüyorum.
"Heterojen" sadece bu bağlamda iki farklı veritabanı motorunu sorgulamaya mı atıfta bulunur?

Yanıtlar:


8

"Heterojen" sadece bu bağlamda iki farklı veritabanı motorunu sorgulamaya mı atıfta bulunur?

Temel olarak, evet. Bir "heterojen" sorgu "heterojen bağlı bir sunucuda" yürütülür.Bu bağlantılı sunucuya yapılan tüm sorgular heterojen olacaktır.

Ve "heterojen" dağıtılmış sorguların bir alt kümesidir

  • SQL Server'ın birden çok örneğinde depolanan dağıtılmış veriler.
  • OLE DB sağlayıcısı kullanılarak erişilen çeşitli ilişkisel ve ilişkisel olmayan veri kaynaklarında depolanan heterojen veriler.

Ama arada sırada "heterojen" ortaya çıkıyor:

MSDN'de sunucuları bağlama konusuna bakın

Kurum genelinde heterojen veri kaynakları üzerinde dağıtılmış sorgular, güncellemeler, komutlar ve işlemler verme yeteneği .

sp_addlinkedserver

Bağlantılı sunucu, OLE DB veri kaynaklarına karşı dağıtılmış, heterojen sorgulara erişim sağlar .

Ve "Heterojen Verilere Katılma" bölümünde Active Directory'yi sorgulamaya yönelik bir MSDN örneği

Ve MSDN yine "Heterojen Veritabanı Çoğaltması"


6

Bildiğim kadarıyla evet.

Sorgunuzla gördüğüm bir sorun, bağlantılı tablonuzdan hangi satırın geri döneceğini bilmenin hiçbir yolu olmadığı. Bu sadece kukla kod mu veya sorgunuz bu şekilde mi yazılıyor?


Kukla kod, 40 veritabanından aldığım ve sadece bu değerlerin bir "durum raporu" tablosuna kaydettiğim tek bir sütun var.
Ben Brocka

1
Ah tamam. Srv.db.dbo.table üzerinde bu sütuna konan değerin, kodu çalıştırdığınız SQL Server sürümüne bağlı olarak farklı olabileceğinin farkında olduğunuzdan emin olmak istedim. Özellikle SQL 2005'ten SQL 2008'e gönderilen kodu kullanarak farklı bir değer elde edersiniz.
mrdenny

Şimdi beni ilgilendiriyorsun, potansiyel sorun nedir, sadece hangi sırayı aldığımı bilmiyorum? Bu durumda tablonun yalnızca tek bir satırı vardır, bu nedenle alt sorguda NEREDE yoktur.
Ben Brocka

Tabloda birden çok satır varsa, SQL 2005 ile ilk satırı alırsınız. SQL 2008 ile yeni tablo ikinci satırı alır. (Bunu geriye alabilirim.)
mrdenny

MS tam olarak bir "heterojen sorgu" ne olduğunu açıklayan bir makale isterdim ama böyle bir şey var gibi görünüyor bu yüzden bu doğru işaretleme.
Ben Brocka

1

Heterojen sadece farklı anlamına gelir. Yani heterojen bir sorgu bir veritabanındadır ve FARKLI bir veritabanını sorgulamaktadır. Veritabanları farklı olduğundan, ayarların farklı olması olasılığını ortaya çıkarır, bu da amaçlanandan farklı sonuçlara neden olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.