การแก้ไข: ผลลัพธ์ไม่ถูกต้องเมื่อคุณเรียกใช้แบบสอบถามที่ประกอบด้วยสันธานและแบบ disjunction ใน SQL Server 3.5 แบบกระชับ

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 2494715
ขยายทั้งหมด | ยุบทั้งหมด

อาการ

เมื่อคุณเรียกใช้แบบสอบถามกับฐานข้อมูล Microsoft SQL Server 3.5 แบบกระชับ ผลลัพธ์ที่ไม่ถูกต้องจะถูกส่งกลับ ปัญหานี้เกิดขึ้นเมื่อแบบสอบถามประกอบด้วยสันธานและแบบ disjunction ถ้าเราสมมติว่า ตัวดำเนินการ และ และ ORแบบสอบถามจะต้องเป็นไปตามเงื่อนไขที่ระบุดังต่อไปนี้:
  • ตัวถูกดำเนินการอย่างใดอย่างหนึ่ง และ ตัวดำเนินคือ นิพจน์ที่ประกอบด้วยการ OR ตัวดำเนินการ
  • ตัวถูกดำเนินการORผู้ปฏิบัติงานประกอบด้วยนิพจน์ที่อ้างอิงคอลัมน์เดียวกัน ดังนั้น สามารถใช้ดัชนีของคอลัมน์เพื่อให้ตรงกับนิพจน์ที่
  • ตัวถูกดำเนินอื่น ๆ ของ และตัวดำเนินการประกอบด้วยการอ้างอิงไปยังคอลัมน์ที่ใช้ดัชนีเดียวกันเป็นคอลัมน์ที่ระบุไว้ในจุดแสดงหัวข้อย่อยก่อนหน้านี้ในรายการนี้ ดังนั้น ดัชนีจะยังสามารถใช้ในนิพจน์นี้
ตัวอย่างเช่น สมมติว่า คุณสร้างตารางต่อไปนี้ที่ใช้ดัชนีในฐานข้อมูล SQL Server 3.5 แบบกระชับ
CREATE TABLE T1(
 C1 int,
 C2 int
)
GO
CREATE INDEX IND_T1 ON T1 (C1, C2)
GO
CREATE TABLE T2(
 C1 int,
 C2 int
)
GO
CREATE INDEX IND_T2 ON T2 (C1, C2)
GO
INSERT INTO T1 VALUES (1, 0)
GO
INSERT INTO T1 VALUES (2, 0)
GO
INSERT INTO T2 VALUES (1, -1)
GO
INSERT INTO T2 VALUES (2, 0)
GO
แล้ว คุณเรียกใช้แบบสอบถามต่อไปนี้:
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 (T1.C2 = T2.C2 OR T2.C2 = -1)
GO
หลังจากที่คุณเรียกใช้แบบสอบถาม คุณได้รับข้อความแสดงผลไม่ถูกต้องต่อไปนี้:
ยุบตารางนี้ขยายตารางนี้
T1C1T1C2T2C1T2C2
2020
อย่างไรก็ตาม คุณคาดว่าผลลัพธ์ต่อไปนี้:
ยุบตารางนี้ขยายตารางนี้
T1C1T1C2T2C1T2C2
101-1
2020
หมายเหตุปัญหานี้ก็เกิดขึ้นเมื่อคุณใช้การได้จากที่ใดส่วนคำสั่งเพื่อดำเนินการทางตรรกะสันธานสองนิพจน์ ตัวอย่างเช่น ปัญหานี้ยังเกิดขึ้นเมื่อคุณเรียกใช้แบบสอบถามต่อไปนี้:
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
WHERE T1.C2 = T2.C2 OR T2.C2 = -1
GO

การแก้ไข

โปรแกรมแก้ไขด่วนที่แก้ไขปัญหานี้จะรวมอยู่ในแพคเกจโปรแกรมปรับปรุงที่สะสม 4 สำหรับ SQL Server แบบกระชับ 3.5 Service Pack 2

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการขอรับการปรับปรุงการแพคเกจ 4 สำหรับ SQL Server แบบกระชับ 3.5 Service Pack 2 คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base:
2516828 ปรับปรุง 4 สำหรับ SQL Server กระชับ 3.5 เซอร์วิสแพ็ค 2

การหลีกเลี่ยงปัญหา

เมื่อต้องการหลีกเลี่ยงปัญหานี้ เขียนแบบสอบถาม โดยใช้หนึ่งในวิธีต่อไปนี้:

วิธีที่ 1

ใช้คำแนะนำของตารางในแบบสอบถามเพื่อปิดใช้งานดัชนีการ ตัวอย่างเช่น เรียกใช้แบบสอบถามต่อไปนี้เพื่อปิดใช้งานดัชนี:
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)) ON
T1.C1 = T2.C1
AND (T1.C2 = T2.C2 OR T2.C2 = -1)
GO 

วิธีที่ 2

Re-write แบบสอบถามเพื่อหลีกเลี่ยงการประชุมมีเงื่อนไขที่ระบุไว้ในส่วน "อาการ":
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)

สถานะ

Microsoft ยืนยันว่า ปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งแสดงไว้ในส่วน"ใช้งาน"

คุณสมบัติ

หมายเลขบทความ (Article ID): 2494715 - รีวิวครั้งสุดท้าย: 27 เมษายน 2554 - Revision: 2.0
Keywords: 
kbfix kbqfe kbexpertiseadvanced kbsurveynew kbmt KB2494715 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:2494715

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com