อาการ
สมมติว่าคุณได้เพิ่มคอลัมน์ลงในตารางใน Microsoft SQL Server ๒๐๑๒หรือ SQL Server ๒๐๑๔ เมื่อขนาดของแถวใกล้เคียงกับขนาดสูงสุดที่อนุญาตที่เป็น๘,๐๖๐ไบต์การดำเนินการเพิ่มอาจใช้เวลานาน
สาเหตุ
ปัญหานี้เกิดขึ้นเนื่องจากเมื่อขนาดทั้งหมดของแถวใกล้เคียงกับขนาดแถวสูงสุดที่อนุญาต SQL Server จะสแกนทั้งหมดของตารางเพื่อให้แน่ใจว่าการเพิ่มคอลัมน์ใหม่ไม่ได้ละเมิดความสอดคล้องของข้อมูล เวอร์ชันก่อนที่ SQL Server ๒๐๑๒จะไม่ทำการตรวจสอบนี้และที่ทำให้ภาษาของข้อกำหนดข้อมูล (DDL) ทำงานได้เร็วขึ้น อย่างไรก็ตามลักษณะการทำงานนี้จะทำให้เกิดความล้มเหลวในการดำเนินการในภายหลังเช่นการอัปเดตแถวหรือการลดขนาดถ้าขนาดของแถวเกินขนาดที่อนุญาต
การแก้ไข
การอัปเดตที่สะสมจะแนะนำการตั้งค่าสถานะการติดตามใหม่๖๔๗สำหรับลักษณะการทำงานที่เข้ากันได้แบบย้อนหลัง ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตที่สะสมของ SQL Server ครั้งแรก
การอัปเดตที่สะสม5สำหรับ SQL Server ๒๐๑๔ /en-us/help/3011055
การอัปเดตที่สะสม12สำหรับ SQL Server ๒๐๑๒ SP1 /en-us/help/2991533
การอัปเดตที่สะสม2สำหรับ SQL Server ๒๐๑๒ SP2 /en-us/help/2983175
การอัปเดตที่สะสมใหม่แต่ละรายการสำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตที่สะสมก่อนหน้านี้ ตรวจสอบการอัปเดตที่สะสมล่าสุดสำหรับ SQL Server:
ข้อมูลเพิ่มเติม
-
คุณสามารถเปิดใช้งานการตั้งค่าสถานะการติดตาม๖๔๗โดยใช้พารามิเตอร์การเริ่มต้น สำหรับข้อมูลเพิ่มเติมให้ดูที่ตัวเลือกการเริ่มต้นบริการกลไกจัดการฐานข้อมูล
-
คุณสามารถเรียกใช้แบบสอบถามต่อไปนี้ (โปรดแทนที่ชื่อตาราง <> ด้วยชื่อตารางที่แท้จริงของคุณ) เพื่อทดสอบตารางเฉพาะก่อนที่การดำเนินการในระบบการผลิตและการวางแผนผลกระทบของปัญหานี้ ถ้าผลลัพธ์มีค่ามากกว่า๘,๐๖๐ตารางของคุณจะอยู่ภายใต้ปัญหานี้ นอกจากนี้ถ้าคุณมีคอลัมน์ที่ตกหล่นคุณจำเป็นต้องปรับเปลี่ยนตารางที่มีตัวเลือกสร้างใหม่ การสร้างตารางใหม่สามารถทำให้คิวรีส่งกลับผลลัพธ์ที่ถูกต้องได้
select 1+1+2 + 2 + (case when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end) + ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 + sum( case when max_length=-1 then 24 else max_length end) from sys.system_internals_partition_columns col join sys.partitions par on col.partition_id = par.partition_id where object_id = object_id ('<table name>') and index_id in (0,1) and partition_number =1
-
คุณสามารถพิจารณาเพิ่มคอลัมน์ความยาวตัวแปรหรือคอลัมน์ห่างเมื่อแอปพลิเคชันของคุณมักจะเพิ่มคอลัมน์ใหม่ลงในตาราง มันเป็นการดำเนินการ metadata เท่านั้นแม้ว่าขนาดทั้งหมดของคอลัมน์ทั้งหมดเกินกว่า๘,๐๖๐ไบต์
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"