ปัญหานี้ยังคงเป็นปัญหาที่พบบ่อยในหมู่นักพัฒนาและแอปพลิเคชันจำนวนมากโดยไม่คำนึงถึงขนาด
น่าเสียดายที่คำแนะนำข้างต้นไม่สามารถแก้ไขสถานการณ์ทั้งหมดได้เช่นโฮสติ้งที่ใช้ร่วมกันคุณไม่สามารถพึ่งพาโฮสต์ของคุณในการตั้งค่าพารามิเตอร์เริ่มต้น -t272 ได้
นอกจากนี้หากคุณมีตารางที่ใช้คอลัมน์ข้อมูลประจำตัวเหล่านี้สำหรับคีย์หลักเป็นความพยายามอย่างมากในการวางคอลัมน์เหล่านั้นและสร้างใหม่เพื่อใช้วิธีแก้ปัญหาลำดับ BS วิธีแก้ปัญหาลำดับจะดีก็ต่อเมื่อคุณออกแบบตารางใหม่ตั้งแต่ต้นใน SQL 2012+
บรรทัดล่างคือถ้าคุณอยู่บน Sql Server 2008R2 ให้อยู่กับมัน อย่างจริงจังอยู่กับมัน จนกว่า Microsoft จะยอมรับว่าพวกเขานำเสนอบั๊กขนาดใหญ่ซึ่งยังคงมีอยู่แม้ใน Sql Server 2016 เราก็ไม่ควรอัปเกรดจนกว่าพวกเขาจะเป็นเจ้าของและแก้ไขมัน
Microsoft เปิดตัวการเปลี่ยนแปลงที่รุนแรงกล่าวคือพวกเขาทำลาย API ที่ใช้งานได้ซึ่งไม่ทำงานตามที่ออกแบบไว้อีกต่อไปเนื่องจากระบบของพวกเขาลืมข้อมูลประจำตัวปัจจุบันของพวกเขาในการรีสตาร์ท แคชหรือไม่มีแคชนี่เป็นสิ่งที่ยอมรับไม่ได้และนักพัฒนาของ Microsoft ที่ใช้ชื่อว่า Bryan จำเป็นต้องเป็นเจ้าของมันแทนที่จะบอกให้โลกรู้ว่ามันเป็น "โดยการออกแบบ" และ "คุณลักษณะ" แน่นอนว่าการแคชเป็นคุณสมบัติ แต่การสูญเสียการติดตามว่าข้อมูลประจำตัวต่อไปควรเป็นอย่างไรไม่ใช่คุณสมบัติ มันเป็นบั๊กที่ไร้สาระ !!!
ฉันจะแบ่งปันวิธีแก้ปัญหาที่ฉันใช้เนื่องจากฐานข้อมูลของฉันอยู่บนเซิร์ฟเวอร์โฮสติ้งที่ใช้ร่วมกันฉันไม่ได้ทิ้งและสร้างคอลัมน์คีย์หลักของฉันใหม่ซึ่งจะเป็น PITA ขนาดใหญ่
แต่นี่เป็นการแฮ็คที่น่าอับอายของฉัน (แต่ไม่น่าอับอายเท่ากับข้อบกพร่อง POS ที่ไมโครซอฟท์แนะนำ)
สับ / แก้ไข:
ก่อนคำสั่งแทรกของคุณเพียงแค่ระบุตัวตนของคุณใหม่ก่อนการแทรกแต่ละครั้ง ขอแนะนำให้แก้ไขนี้เฉพาะในกรณีที่คุณไม่มีผู้ดูแลระบบควบคุมอินสแตนซ์ Sql Server ของคุณมิฉะนั้นฉันขอแนะนำให้ทำการรีสตาร์ทเซิร์ฟเวอร์ใหม่
declare @newId int -- where int is the datatype of your PKey or Id column
select @newId = max(YourBuggedIdColumn) from YOUR_TABLE_NAME
DBCC CheckIdent('YOUR_TABLE_NAME', RESEED, @newId)
เพียงแค่ 3 บรรทัดนั้นก่อนแทรกคุณก็ควรจะไป มันจะไม่ส่งผลกระทบต่อประสิทธิภาพมากขนาดนั้นกล่าวคือจะไม่สามารถสังเกตเห็นได้
โชคดี.
order by ReceiptNo
ในแบบสอบถามของคุณระเบียนเหล่านั้นไม่มีจริงหรือ คุณแน่ใจหรือไม่ว่าเมื่อแทรกระเบียนแล้วจะไม่มีข้อผิดพลาด หากบันทึกพยายามแทรกและล้มเหลวข้อมูลประจำตัวจะเพิ่มขึ้นเช่นเดียวกันหากบันทึกถูกลบ หากบันทึกถูกลบReceiptNo
จะไม่รีเซ็ต คุณสามารถลงรายการบัญชีสร้างFee
ตารางได้หรือไม่?