تحقق من القيد على أعمدة متعددة
-
26-09-2019 - |
سؤال
أستخدم 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...)
يمكنك ببساطة تطبيق التحقق من الصحة في الزناد على الطاولة ، خاصة أنه سيتم إعادة تشغيل العملية في كلتا الحالتين إذا فشل الشيك.