محدودیت Check در SQL Server
در SQL Server ، محدودیت بررسی یا چک کردن (check constraint) برای تعیین محدودیت روی مقادیر یک ستون هنگام درج یا به روزرسانی استفاده می شود.
به عنوان مثال، اگر ستونی به مقدار تاریخ در محدوده خاصی نیاز دارد، یا یک مقدار باید در قالب خاصی باشد، از check constraint استفاده کنید. مثلاً مقدار در ستون zip_code باید 5 رقمی باشد.
محدودیت های Check را می توان با CREATE یا ALTER TABLE T-SQL ایجاد کرد. در دستور CREATE TABLE، محدودیت های check را بعد از تعریف همه ستون ها اضافه کنید.
دستور CREATE TABLE زیر یک محدودیت check روی ستون حقوق (Salary) جدول Employee تعریف می کند.
دستور ALTER TABLE زیر یک محدودیت check بر روی ستون حقوق و دستمزد جدول Employee اضافه می کند که در آن مقادیر باید برای عبارت بولی Salary > 2000 AND Salary < 4000 به صورت True ارزیابی شوند.
حال اگر بخواهید رکوردی را در جدول Employee درج یا به روز کنید که در آن حقوق در محدوده مشخص شده نباشد، خطای زیر ایجاد می شود.
The INSERT statement conflicted with the CHECK constraint "CHK_Emp_Salary". The conflict occurred in database "HR", table "dbo.Employee", column 'Salary'. The statement has been terminated.
نکات مهم زیر را به خاطر بسپارید:
1 - یک محدودیت check را می توان با هر Boolean منطقی ایجاد کرد که بر اساس عملگرهای منطقی True یا False را برمی گرداند. به عنوان مثال، عبارت بولین Salary > 2000 and Salary < 4000 مشخص می کند که مقدار در ستون حقوق باید بیشتر از 2000 و کمتر از 4000 باشد.
2 - یک عبارت بولی محدودیت check می تواند از چندین ستون استفاده کند.
3 - یک ستون منفرد می تواند دارای چندین محدودیت check باشد.
4 - محدودیت های check، مقادیری که به صورت False ارزیابی می شوند را رد می کند. اگر بخواهید مقداری را خارج از محدوده مقدار محدودیت check وارد کنید، موتور SQL خطایی می دهد که نشان می دهد که عبارت insert با محدودیت CHECK در تضاد است و دستور پایان یافته است.
5 - یک محدودیت check یک مقدار NULL را ارزیابی نمی کند. بنابراین NULL را می توان بدون محدودیت درج کرد. برای محدود کردن مقادیر NULL از محدودیت NOT NULL استفاده کنید.
6 - محدودیت های check در دستورات Delete اعتبارسنجی نمی شوند.
7 - می توانید به جای حذف محدودیت های check ، آن ها را فعال یا غیرفعال کنید.
ایجاد محدودیت Check با استفاده از SSMS
مرحله 1 : در Object explorer، پوشه جدول را باز کنید و روی پوشه Constraints کلیک راست کرده و New Constraint را انتخاب کنید، مانند تصویر زیر.
مرحله 2 : کادر محاوره ای Check Constraint باز می شود. Expressions را انتخاب کنید و مانند شکل زیر روی بیضی ها ... کلیک کنید.
مرحله 3 : در کادر محاوره ای "Check constraint Expression" عبارت SQL را برای محدودیت check تایپ کنید. به عنوان مثال، برای ستون حقوق جدول Employee ، محدوده حقوق و دستمزد را به صورت Salary > 2000 and Salary < 4000 وارد کرده و OK را کلیک کنید.
مرحله 4 : در گروه Identity، می توانید نام محدودیت را تغییر دهید و توضیحات اضافه کنید.
مرحله 5 : در بخش Table Designer در زیر Identity، محدودیت check را فعال یا غیرفعال کنید و مشخص کنید که چه زمانی محدودیت check اعمال می شود.
مرحله 6 : روی Close کلیک کنید. در منوی File روی <Save <table name کلیک کنید.
بنابراین، شما می توانید یک محدودیت check روی یک ستون در یک جدول ایجاد کنید.
تغییر و اصلاح محدودیت Check با استفاده از SSMS
SQL Server Management Studio یا SSMS را باز کنید، روی نام جدول کلیک راست کرده و Design را انتخاب کنید تا آن در table designer باز شود.
اکنون بر روی table designer کلیک راست کرده و مطابق شکل زیر گزینه ... Check Constraints را انتخاب کنید.
با این کار کادر محاوره ای "Check Constraint" باز می شود که در آن می توانید یک عبارت را ویرایش کنید، نام محدودیت را تغییر دهید یا محدودیت را برای هر به روز رسانی یا درج غیرفعال کنید، همانطور که در زیر نشان داده شده است.
پس از اصلاح روی Close کلیک کنید و تغییرات را ذخیره کنید.
فعال یا غیرفعال کردن محدودیت Check
هنگامی که یک محدودیت check ایجاد کردید، می توانید آن را غیرفعال کنید. غیرفعال کردن محدودیت check ، محدودیت check را در درج یا به روزرسانی اعمال نمی کند. بعداً در صورت نیاز می توانید دوباره آن را فعال کنید.
آنچه که در زیر می بینید محدودیت CHK_Emp_Salary را غیرفعال می کند.
برای غیرفعال کردن یک محدودیت check در SSMS، باید "No" را برای "Check Existing Data On Creation Or Re-Enabling" انتخاب کنید. همانطور که در زیر نشان داده شده است، برای فعال کردن مجدد آن "Yes" را انتخاب کنید.
حذف محدودیت Check با استفاده از SSMS
از دستور DROP CONSTRAINT در عبارت ALTER TABLE برای حذف محدودیت های check موجود استفاده کنید.
آنچه که در زیر می بینید محدودیت چک CHK_Emp_Salary را در جدول Employee حذف می کند.
برای حذف محدودیت ها با استفاده از SQL Server Management Studio، جدولی را که قرار است محدودیتی از آن حذف شود را باز کنید.
حالا نود Constraints را باز کنید و روی محدودیتی که قرار است حذف شود کلیک راست کرده و روی Delete کلیک کنید.
در کادر محاوره ای Delete Object، روی Ok کلیک کنید تا محدودیت حذف شود.