ข้อ จำกัด ที่ไม่ซ้ำกันในคอลัมน์ Nullable ใน SQL Server 2005


12

ในโครงการหนึ่งที่ฉันกำลังดำเนินการอยู่ฉันต้องตั้งค่าเขตข้อมูลเฉพาะให้ไม่ซ้ำกัน (ไม่ใช่ปัญหา!) แต่ถ้าเขตข้อมูลเป็นโมฆะฉันต้องการให้ข้อ จำกัด ถูกละเว้น ใน SQL Server 2008 ฉันใช้ดัชนีตัวกรองตามที่แสดงด้านล่าง แต่ไม่มีใน SQL เวอร์ชันก่อนหน้านี้!

CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL

แต่ฉันไม่คิดว่ามันมีอยู่ใน SQL Server 2005 จริงๆแล้วโพสต์บล็อกนี้ระบุว่ามีวิธีแก้ไขปัญหาโดยใช้ทริกเกอร์เพื่อตรวจสอบความไม่ซ้ำ ใครบ้างมีตัวอย่างของสิ่งนี้? หรืออาจเป็นทางเลือก?

น่าเสียดายที่การอัปเกรดเป็น SQl Server 2008 ไม่ใช่ตัวเลือกสำหรับลูกค้ารายนี้ !!

คำตอบ:


18

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


7

คุณสามารถสร้างมุมมอง (โดยที่ชื่อผู้ใช้ไม่ใช่ค่าว่าง) จากนั้นใส่ดัชนีที่ไม่ซ้ำกับมุมมอง คุณไม่จำเป็นต้องใช้มุมมอง แต่จะมีให้สำหรับสิ่งนี้

นอกจากนี้คุณยังสามารถใช้เทคนิคนี้เพื่อบังคับให้มีความเป็นเอกลักษณ์ในหลาย ๆ ตารางซึ่งปกติจะเป็นไปไม่ได้


2
มุมมองที่จัดทำดัชนีไม่จำเป็นต้องมีรุ่นองค์กร อย่างไรก็ตามพวกเขาต้องการให้คุณใช้คำแนะนำการสืบค้น WITH (NOEXPAND) เพื่อบังคับให้เครื่องมือเพิ่มประสิทธิภาพการสืบค้นมาตรฐานรุ่นใช้มุมมองที่จัดทำดัชนีแทนการสืบค้นพื้นฐาน
ยิระมะยา Peschka

3
ในกรณีนี้แม้ว่ามุมมองเพียงอย่างเดียวคือการบังคับใช้ข้อ จำกัด ที่ไม่ซ้ำกันและนี่คือวิธีการที่ถูกต้อง / ทั่วไป
Martin Smith

2
แก้ไขเพื่อลบข้อมูลที่ไม่ถูกต้องเกี่ยวกับ Enterprise Edition ที่ต้องการ
Meff

@ Meff ขอบคุณที่สละเวลาเพื่อตอบสนองต่อความคิดเห็นที่นี่ - ฉันหวังว่าคุณจะไม่เป็นคนแปลกหน้าในเว็บไซต์: คุณอาจสนใจคำถามเหล่านี้ :)
แจ็คบอกว่าลอง topanswers.xyz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.