خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


بررسی عدم اضافه شدن رکورد تکراری به غیر از رکوردهای Null در SQL Server

بررسی عدم اضافه شدن رکورد تکراری به غیر از رکوردهای Null در SQL Server
یک سناریوی ساده ای را متصور شوید که در آن نیاز دارید که یونیک بودن ستون را چک کنید و مطمئن شوید همه رکوردهای وارد شده در این ستون Unique هستند و در عین حال رکوردهای null بتوانند بدون هیچ مشکلی اضافه شوند. از SQL Server 2008 امکان ایجاد ایندکس unique constraint اضافه شده که می توانید رکوردهای Null را به ستون خود اضافه کنید و در ادامهSyntax آن را خواهید دید.

نرم افزار سامانه مودیان راهکار



CREATE UNIQUE INDEX [Index Name]
ON [Table Name]([Column Name])
WHERE [Column Name] IS NOT NULL;

در این مثال یک جدول و یک unique constraint با فعال کردن ویژگی Not Null را ایجاد می کنیم. قصد ما همانطور که در پاراگرافبالا توضیح دادیم این است که بتوان رکوردهای unique را اضافه کرده و از رکوردهای تکراری جلوگیری به عمل آورده و همین که مانعی برای اضافه شدن رکوردهای Null به وجود نیاید. اگر قصد اضافه کردن رکورد تکراری را در جدول داشته باشید، با خطا مواجه خواهید شد که این مورد را هم تست خواهیم کرد.

/* Create a table */
CREATE TABLE dbo.MTB_Table_C (EmpID INT NOT NULL, EmpCode VARCHAR(10) NULL);

/* Create a filtered index on the colum EmpCode */
CREATE UNIQUE INDEX IX_EmpCode_NotNull
ON dbo.MTB_Table_C(EmpCode) WHERE EmpCode IS NOT NULL;

/* Insert values with multiple nulls */
INSERT INTO dbo.MTB_Table_C (EmpID, EmpCode) Values (1, 'A00A01')
INSERT INTO dbo.MTB_Table_C (EmpID, EmpCode) Values (2, NULL)
INSERT INTO dbo.MTB_Table_C (EmpID, EmpCode) Values (3, 'A00A03')
INSERT INTO dbo.MTB_Table_C (EmpID, EmpCode) Values (4, NULL)
INSERT INTO dbo.MTB_Table_C (EmpID, EmpCode) Values (5, 'A00A05')
INSERT INTO dbo.MTB_Table_C (EmpID, EmpCode) Values (6, NULL)

با اجرای دستور فوق جدول مورد نظر با ویژگی هایی که توضیح دادیم ایجاد شده و سپس 6 کرود به این جدول اضافه می شود.
خب، اگر قصد اضافه کردن رکورد تکراری به جدول مذکور را داشته باشید، با خطا مواجه می شوید که در کوئری زیر، قصد اضافه کردن رکورد تکراری به جدول را داریم.

/* Try to insert a duplicate value in EmpCode */
INSERT INTO dbo.MTB_Table_C (EmpID, EmpCode) Values (5, 'A00A05')

/* You will get an error */
Msg 2601, Level 14, State 1, Line 243
Cannot insert duplicate key row in object 'dbo.MTB_Table_C' with unique index 'IX_EmpCode_NotNull'. The duplicate key value is (A00A05).
The statement has been terminated.

حالا اگر اقدام به اضافه کردن رکورد Null را داشته باشید، خواهید دید که هیچ مانعی از این بابت وجود ندارد.


نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز