นำไปใช้กับ
SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2012 Business Intelligence SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2012 Enterprise Core

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

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

เมื่อต้องการทบทวนเกิดปัญหาให้ทำตามขั้นตอนต่อไปนี้:

  1. เรียกใช้คิวรีต่อไปนี้เพื่อสร้างตารางที่มีคอลัมน์ 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

  2. เรียกใช้แบบสอบถามต่อไปนี้และคุณสามารถดูว่าค่าทั้งสามจะแสดงรายการได้อย่างถูกต้องในผลลัพธ์ที่ส่งกลับ:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;

  3. เรียกใช้คิวรีต่อไปนี้เพื่อสร้างดัชนีบนคอลัมน์ "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

  4. เรียกใช้คิวรีในขั้นตอนที่2อีกครั้ง ในตอนนี้คิวรีจะส่งกลับเพียงหนึ่งแถวเท่านั้น

  5. เรียกใช้คิวรีต่อไปนี้เพื่อลบดัชนีและตารางที่คุณสร้างขึ้น:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO

อ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน CAST และแปลงให้ไปที่เว็บไซต์ MSDN ต่อไปนี้:

ข้อมูลทั่วไปเกี่ยวกับฟังก์ชัน CAST และแปลงใน SQL Server

สถานะ

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

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

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

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