SQL Server 2008: تحقق من القيود التي تضمن أن يتم تعيين قيمة واحدة فقط في جميع الصفوف على 1 وآخرون 0
-
25-09-2019 - |
سؤال
هناك حاجة إلى بناء قيود على العمود تضمن أن قيمة واحدة فقط في جميع الصفوف هي 1 وجميع الآخرين 0.
يوجد حل مع المشغلات ولكني أرغب في الحصول على شيء مدمج.
هل هذا الشيء ممكن على الإطلاق؟
المحلول
تعديل
في الواقع ، لاحظت أنك على SQL Server 2008 ، يمكنك استخدام فهرس مرشح لهذا
CREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1
الإجابة الأصلية
من المحتمل أن تكون أسهل طريقة لتخزين هذا PK خاص في جدول صف واحد منفصل. لا يمكن تطبيق جانب لا يزيد عن صف واحد مع قيود التحقق.
CREATE TABLE OneRowTable
(
lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'),
OtherTablePK int
);
بخلاف ذلك ، على افتراض أنه قد يكون لديك حقل معرف يتكون من أعداد صحيحة إيجابية ، يمكنك إضافة عمود محسوب مع التعريف التالي
case when col=1 then -1 else id end
وأضف قيدًا فريدًا لذلك.
لا تنتمي إلى StackOverflow