Microsoft กระจาย Microsoft SQL Server ๒๐๐๘ R2 Service Pack 1 (SP1) เป็นไฟล์ที่สามารถดาวน์โหลดได้หนึ่งไฟล์ เนื่องจากการแก้ไขจะสะสมแต่ละรุ่นใหม่มีโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ใน SQL Server ๒๐๐๘ R2 Service Pack 1 (SP1) เวอร์ชันก่อนหน้านี้ได้รับการแก้ไขแล้ว
อาการ
พิจารณาสถานการณ์ต่อไปนี้:
-
คุณมีคอลัมน์ชนิดข้อมูล datetimeoffset ในตารางใน Microsoft sql Server ๒๐๐๘ R2 หรือใน Microsoft sql server ๒๐๑๒
-
คุณสร้างดัชนีบนคอลัมน์datetimeoffset
-
คุณแปลงชนิดข้อมูลdatetimeoffsetเป็นชนิดข้อมูลsmalldatetimeโดยใช้ฟังก์ชันเพี้ยนหรือแปลงโดยไม่มีอาร์กิวเมนต์สไตล์หรือเมื่อค่าของอาร์กิวเมนต์สไตล์เป็น0
-
ผลลัพธ์ของฟังก์ชัน CAST หรือ CONVERT จะถูกใช้ในตัวกรองในคิวรีแบบใช้ Transact SQL
-
คุณเรียกใช้แบบสอบถาม Transact SQL
ในสถานการณ์สมมตินี้ผลลัพธ์ที่ส่งกลับโดยคิวรีจะไม่ถูกต้องเนื่องจากตัวกรองไม่ทำงานอย่างถูกต้อง ตัวอย่างเช่นสมมติว่าคอลัมน์ datetimeoffset ที่ชื่อ "วันที่" มีค่าต่อไปนี้:
-
2011-05-21 23:00:00 -01:00
-
2011-05-21 23:00:00 +00:00
-
2011-05-21 23:00:00 +01:00
คุณเรียกใช้แบบสอบถามต่อไปนี้:
SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'
ผลลัพธ์ของคิวรีจะส่งกลับเพียงหนึ่งแถวเท่านั้น อย่างไรก็ตามผลลัพธ์ที่คาดไว้ควรจะส่งกลับแถวสำหรับค่าทั้งหมดสามค่า
การแก้ไข
ข้อมูลโปรแกรมอัปเดตสะสม
SQL Server 2012
การแก้ไขสำหรับปัญหานี้ถูกนำออกใช้ครั้งแรกใน3การอัปเดตที่สะสมสำหรับ SQL Server ๒๐๑๒ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแพคเกจโปรแกรมปรับปรุงที่สะสมนี้ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
๒๗๒๓๗๔๙ แพคเกจโปรแกรมปรับปรุงที่สะสม3สำหรับ SQL Server ๒๐๑๒หมายเหตุ เนื่องจาก builds สะสมแต่ละรุ่นของการแก้ไขใหม่มีโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ใน SQL Server ๒๐๑๒รุ่นก่อนหน้านี้ Microsoft ขอแนะนำให้คุณพิจารณาใช้การแก้ไขการแก้ไขล่าสุดที่มีโปรแกรมแก้ไขด่วนนี้ สำหรับข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base:
๒๖๙๒๘๒๘ SQL Server ๒๐๑๒รุ่นที่เผยแพร่หลังจากที่มีการเผยแพร่ SQL Server ๒๐๑๒ คุณต้องนำโปรแกรมแก้ไขด่วนของ SQL Server ๒๐๑๒ไปใช้กับการติดตั้ง SQL Server ๒๐๑๒
SQL Server ๒๐๐๘ R2 Service Pack 2
การแก้ไขสำหรับปัญหานี้ถูกนำออกใช้ครั้งแรกใน1การอัปเดตที่สะสมสำหรับ SQL Server ๒๐๐๘ R2 Service Pack 2 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการขอรับแพคเกจโปรแกรมปรับปรุงที่สะสมนี้ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
๒๗๒๐๔๒๕ แพคเกจโปรแกรมปรับปรุงที่สะสม1สำหรับ SQL Server ๒๐๐๘ R2 Service Pack 2หมายเหตุ เนื่องจาก builds สะสมแต่ละรุ่นของการแก้ไขใหม่ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ในการแก้ไขรุ่นก่อนหน้าของ SQL Server ๒๐๐๘ R2 เราขอแนะนำให้คุณพิจารณาใช้การแก้ไขการแก้ไขล่าสุดที่มีโปรแกรมแก้ไขด่วนนี้ สำหรับข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base:
๒๗๓๐๓๐๑ รุ่นของ SQL Server ๒๐๐๘ R2 รุ่นที่เผยแพร่หลังจาก SQL Server ๒๐๐๘ R2 Service Pack 2 ถูกเผยแพร่แล้ว
SQL Server ๒๐๐๘ R2 SP1
การแก้ไขสำหรับปัญหานี้ถูกนำออกใช้ครั้งแรกใน7การอัปเดตที่สะสม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการขอรับแพคเกจโปรแกรมปรับปรุงที่สะสมนี้สำหรับ SQL Server ๒๐๐๘ R2 Service Pack 1 ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
๒๗๐๓๒๘๒ แพคเกจโปรแกรมปรับปรุงที่สะสม7สำหรับ SQL Server ๒๐๐๘ R2 SP1หมายเหตุ เนื่องจาก builds สะสมแต่ละรุ่นของการแก้ไขใหม่ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ใน SQL Server ๒๐๐๘ R2 Service Pack 1 เวอร์ชันก่อนหน้า เราขอแนะนำให้คุณพิจารณาใช้การแก้ไขการแก้ไขล่าสุดที่มีโปรแกรมแก้ไขด่วนนี้ สำหรับข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base:
๒๕๖๗๖๑๖ รุ่นของ SQL Server ๒๐๐๘ R2 รุ่นที่เผยแพร่หลังจากที่มีการเผยแพร่ SQL Server ๒๐๐๘ R2 SP1
ข้อมูลเพิ่มเติม
เมื่อต้องการทบทวนเกิดปัญหาให้ทำตามขั้นตอนต่อไปนี้:
-
เรียกใช้คิวรีต่อไปนี้เพื่อสร้างตารางที่มีคอลัมน์ datetimeoffset และแทรกบางระเบียน:CREATE TABLE #TestTimeZones (dto datetimeoffset(0)); GO INSERT INTO #TestTimeZones(dto) VALUES ('2011-05-21 23:00:00 -01:00'), ('2011-05-21 23:00:00 +00:00'), ('2011-05-21 23:00:00 +01:00'); GO
-
เรียกใช้แบบสอบถามต่อไปนี้และคุณสามารถดูว่าค่าทั้งสามจะแสดงรายการได้อย่างถูกต้องในผลลัพธ์ที่ส่งกลับ:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;
-
เรียกใช้คิวรีต่อไปนี้เพื่อสร้างดัชนีบนคอลัมน์ "dto" และเมื่อต้องการทำซ้ำคิวรีเดียวกันให้ทำดังนี้CREATE INDEX IX_testTimeZones_Dto ON #TestTimeZones(dto); GO -- Repeat the same query DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withIndex FROM #TestTimeZones WHERE CAST(dto A smalldatetime)=@t; GO
-
เรียกใช้คิวรีในขั้นตอนที่2อีกครั้ง ในตอนนี้คิวรีจะส่งกลับเพียงหนึ่งแถวเท่านั้น
-
เรียกใช้คิวรีต่อไปนี้เพื่อลบดัชนีและตารางที่คุณสร้างขึ้น:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO
อ้างอิง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน CAST และแปลงให้ไปที่เว็บไซต์ MSDN ต่อไปนี้:
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"