سؤال

أستخدم SQL Server 2008

يمكنني استخدام قيد التحقق على أعمدة متعددة في نفس الجدول لمحاولة التحقق من صحة إدخال البيانات.

تلقيت خطأ:

يقوم قيود التحقق من العمود للعمود "AAAA" بمراجع عمود آخر ، الجدول "xxxx".

تحقق من القيد لا يعمل بهذه الطريقة.

أي طريقة أخرى لتنفيذ هذا على جدول واحد دون استخدام FK؟

شكرًا

هنا مثال على الكود الخاص بي

CREATE TABLE dbo.Test 
(   
EffectiveStartDate  dateTime2(2)        NOT NULL,
EffectiveEndDate    dateTime2(2)        NOT NULL
    CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
هل كانت مفيدة؟

المحلول

نعم ، حدد قيد الفحص في الطاولة مستوى

CREATE TABLE foo (
   bar int NOT NULL, 
   fred varchar(50) NOT NULL,

   CONSTRAINT CK_foo_stuff CHECK (bar = 1 AND fred ='fish')
)

أنت تعلن أنه مضمّن عمود قيد

...
fred varchar(50) NOT NULL CONSTRAINT CK_foo_fred CHECK (...)
...

تحرير ، أسهل للنشر من الوصف. تم إصلاح فواصلك.

CREATE TABLE dbo.Test 
(   
  EffectiveStartDate  dateTime2(2)        NOT NULL,
  EffectiveEndDate    dateTime2(2)        NOT NULL,  --need comma
  CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate) --no comma
);

بالطبع ، يبقى السؤال هل تستخدم قيد التحقق حيث يجب أن يكون قيد FK ...؟

نصائح أخرى

تحقق من القيود يمكن أن تشير إلى عمود واحد أو إلى السجل بأكمله.

استخدم هذا بناء الجملة لقيود مستوى السجل:

ALTER TABLE MyTable
ADD CONSTRAINT MyCheck
CHECK (...your check expression...)

يمكنك ببساطة تطبيق التحقق من الصحة في الزناد على الطاولة ، خاصة أنه سيتم إعادة تشغيل العملية في كلتا الحالتين إذا فشل الشيك.

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