ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

อาการ

บนคอมพิวเตอร์ที่ใช้ Microsoft SQL Server ๒๐๐๘ให้พิจารณาสถานการณ์สมมติต่อไปนี้

สถานการณ์ที่ 1

คุณระบุนิพจน์ทั่วไปของตาราง (CTE) โดยใช้คำสั่งที่มี ตัวอย่างเช่นคุณเรียกใช้แบบสอบถามต่อไปนี้

WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)

จากนั้นคุณเรียกใช้คิวรีนี้

SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1

ในสถานการณ์สมมตินี้แผนการสอบถามที่แคชไว้สำหรับแบบสอบถามนี้จะเก็บค่า statement_start_offset และค่า statement_end_offset ที่ไม่ถูกต้อง โดยเฉพาะคุณสังเกตเห็นค่า statement_end_offset มีขนาดเล็กกว่าค่า statement_start_offset เมื่อคุณเรียกใช้ sys.dm_exec_query_stats การจัดการแบบไดนามิก (DMV) เนื่องจากปัญหานี้รายงานประสิทธิภาพการทำงานอาจล้มเหลวเมื่อรายงานสันนิษฐานว่าค่า statement_start_offset จะมีขนาดเล็กกว่าค่า statement_stop_offset เสมอ

สถานการณ์ที่ 2

คุณระบุนิพจน์ตารางทั่วไปโดยใช้คำสั่งที่มีและคุณใช้ตัวเลือกการคอมไพล์ ตัวอย่างเช่นคุณสร้างฟังก์ชันใน SQL Server ๒๐๐๘โดยใช้สคริปต์ต่อไปนี้

CREATE FUNCTION function1() RETURNS int ASBEGINDECLARE @x intSET @x=1;WITH common_table_expression AS (SELECT @x AS column1) (SELECT @x=column1 FROM common_table_expression) OPTION(RECOMPILE)RETURN @xEND

เมื่อคุณเรียกใช้แบบสอบถาม "เลือก dbo function1 ()" คุณจะได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

เกิดข้อผิดพลาดร้ายแรงบนคำสั่งปัจจุบัน ผลลัพธ์ถ้ามีควรละทิ้ง

นอกจากนี้ข้อผิดพลาดนี้อาจเกิดขึ้นได้โดยไม่มีตัวเลือกการคอมไพล์ถ้า SQL server กำลังประสบกับการรับส่งข้อมูลบนเซิร์ฟเวอร์จำนวนมาก

สถานการณ์สมมติ3

คุณระบุนิพจน์ตารางทั่วไปโดยใช้คำสั่งที่มี ในคำสั่งที่มีคำสั่งที่คุณระบุตารางที่ไม่มีอยู่ ตัวอย่างเช่นคุณเรียกใช้แบบสอบถามต่อไปนี้

WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO

เมื่อคุณเรียกใช้แบบสอบถามนี้คุณจะไม่ได้รับข้อผิดพลาดสำหรับตารางที่ขาดหายไป

สาเหตุ

ปัญหาเหล่านี้เกิดขึ้นเนื่องจากการประมวลผลที่ชำรุดของคำสั่ง SELECT ที่ติดตามคำสั่งด้วย คำสั่งที่มีการใช้ไวยากรณ์ต่อไปนี้

WITH common_table_expression AS(CTE_query_definition)

คำสั่งนี้จะสร้างชุดผลลัพธ์ที่ได้รับมอบหมายให้กับชื่อนิพจน์ทั่วไปของตารางที่ระบุไว้ จากนั้นคุณสามารถทำตามคำสั่งนี้ได้ด้วยคำสั่ง SELECT ถ้าคำสั่งที่สองนี้อยู่ในวงเล็บและจากนั้นคุณพยายามทำการดำเนินการบนผลลัพธ์หรือคุณพยายามเรียกใช้มุมมองการจัดการแบบไดนามิก sys.dm_exec_query_stats คุณจะได้รับผลลัพธ์ที่ไม่ถูกต้องหรือข้อผิดพลาด

การแก้ไข

ข้อมูล service pack เมื่อต้องการแก้ไขปัญหานี้ให้ขอรับ service pack ล่าสุดสำหรับ SQL Server ๒๐๐๘ สำหรับข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base:

๙๖๘๓๘๒ วิธีการขอรับ service pack ล่าสุดสำหรับ SQL Server ๒๐๐๘

วิธีแก้ไขปัญหาชั่วคราว

เมื่อต้องการแก้ไขปัญหาเหล่านี้คุณจำเป็นต้องเอาเครื่องหมายวงเล็บออกจากคำสั่งที่อยู่ถัดจากนิพจน์ตารางทั่วไป ตัวอย่างเช่นพิจารณาสิ่งต่อไปนี้ด้วยคำสั่งที่ใช้เครื่องหมายวงเล็บดังกล่าว

WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)

เมื่อต้องการแก้ไขปัญหาเหล่านี้ให้เปลี่ยนแปลงคำสั่งต่อไปนี้ด้วยคำสั่งที่ไม่ได้ใช้วงเล็บเหล่านี้

WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio

สถานะ

ไมโครซอฟท์ได้รับการยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งแสดงอยู่ในส่วน "นำไปใช้กับ" ปัญหานี้ได้รับการแก้ไขครั้งแรกใน SQL Server ๒๐๐๘ Service Pack 2 (SP2)

ข้อมูลเพิ่มเติม

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้คำสั่งด้วยนิพจน์ตารางทั่วไปให้เยี่ยมชมเว็บเพจที่ MSDN ต่อไปนี้:

ด้วย common_table_expression (Transact SQL)สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ sys.dm_exec_query_stats แวะไปที่เว็บเพจที่ MSDN ต่อไปนี้:

sys.dm_exec_query_stats (Transact SQL)

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×