Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

Düzeltme: bir sorgu çalıştırdığınızda hatalı sonuç, bağlaç ve bir sql Server Compact 3.5 disjunction içerir.

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:2494715
Belirtiler
Bir Microsoft sql Server Compact 3.5 veritabanı karşı bir sorgu çalıştırdığınızda, yanlış sonuç verir. Bağlaç ve bir disjunction sorgu içeriyorsa, bu sorun oluşur. Biz operatörleri olduğunu varsayarsak VE ve OR, sorgu aşağıdaki belirli koşulları karşılaması gerekir:
  • İşlenenleri birini VE işleç içeren bir deyim olarak OR işleci.
  • İşlenenleriORişlecini aynı sütuna başvuru deyimleri içerir. Bu nedenle, sütun dizini ifadeler eşleştirmek için kullanılır.
  • Diğer işleneninde VEoperatör bu listedeki önceki maddesinde belirtilen sütun olarak aynı dizin kullanan bir sütuna başvuru içeriyor. Bu nedenle, dizinin bu deyim üzerinde kullanılabilir.
Örneğin, aşağıdaki tablolarda dizinler kullanan bir sql Server Compact 3.5 veritabanı içinde oluşturduğunuz varsayılmıştır.
CREATE TABLE T1( C1 int, C2 int)GOCREATE INDEX IND_T1 ON T1 (C1, C2)GOCREATE TABLE T2( C1 int, C2 int)GOCREATE INDEX IND_T2 ON T2 (C1, C2)GOINSERT INTO T1 VALUES (1, 0)GOINSERT INTO T1 VALUES (2, 0)GOINSERT INTO T2 VALUES (1, -1)GOINSERT INTO T2 VALUES (2, 0)GO
Daha sonra aşağıdaki sorguyu çalıştırın:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]FROM T1 INNER JOIN T2 ONT1.C1 = T2.C1AND (T1.C2 = T2.C2 OR T2.C2 = -1)GO
Sorguyu çalıştırmak sonra aşağıdaki yanlış sonuç alırsınız:
T1.C1T1.C2T2.C1T2.C2
2020
Bununla birlikte, aşağıdaki sonucu bekler:
T1.C1T1.C2T2.C1T2.C2
101-1
2020
NotBu sorun da kullandığınızda oluşurBURADAmantıksal birlikte iki deyim üzerinde gerçekleştirmek için yan tümcesi. Örneğin, aşağıdaki sorgu çalıştırdığınızda da bu sorun oluşur:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]FROM T1 INNER JOIN T2 ONT1.C1 = T2.C1WHERE T1.C2 = T2.C2 OR T2.C2 = -1GO
Çözüm
Bu sorunu gideren bir düzeltme, sql Server Compact 3.5 Service Pack 2 için toplu güncelleştirme paketi 4 eklenmiştir.

sql Server Compact 3.5 Service Pack 2 için toplu güncelleştirme paketi 4'i elde etme hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
2516828 Toplu güncelleştirmesi 4 sql Server Compact 3.5 Service Pack 2
Pratik Çözüm
Bu soruna geçici bir çözüm için aşağıdaki yöntemlerden birini kullanarak sorguyu yeniden yazın:

Yöntem 1

Dizinler devre dışı bırakmak için sorguda tablo ipuçlarını kullanın. Örneğin, dizinler devre dışı bırakmak için aşağıdaki sorguyu çalıştırın:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]FROM T1 INNER JOIN T2 WITH (INDEX(0)) ONT1.C1 = T2.C1AND (T1.C2 = T2.C2 OR T2.C2 = -1)GO 

Yöntem 2

"Belirtiler" bölümünde belirtilen koşullara uyan önlemek için sorguyu yeniden yazma:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]FROM T1 INNER JOIN T2 ON(T1.C1 = T2.C1 AND T2.C2 = -1) OR (T1.C1 = T2.C1 AND T1.C2 = T2.C2)
Durum
Microsoft bu sorunun "Aşağıdakilere Uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 2494715 - Son İnceleme: 04/27/2011 09:20:00 - Düzeltme: 2.0

  • kbfix kbqfe kbexpertiseadvanced kbsurveynew kbmt KB2494715 KbMttr
Geri bildirim