SQL Server 2008: تحقق من القيود التي تضمن أن يتم تعيين قيمة واحدة فقط في جميع الصفوف على 1 وآخرون 0

StackOverflow https://stackoverflow.com/questions/3804663

سؤال

هناك حاجة إلى بناء قيود على العمود تضمن أن قيمة واحدة فقط في جميع الصفوف هي 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

وأضف قيدًا فريدًا لذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top