استفاده از unique index در ستون با مقدار null توسط Filter Index

در تغییری که لازم بود برای تسک جدید، تو دیتابیس بدیم. باید یه فیلد جدید به یکی جداول اضافه میکردیم که مقدار اون هم برابر با GUID بود
با توجه به مقداری که میگره، نوعش رو برابر با Unique در نظر گرفته بودیم.نکته ای که بود اینه که این فیلد میتونستن در بعضی موارد مقدار Null هم داشته باشه.
همه چی داشت خوب پیش میرفت تا اینکه توی محیط تست خطاها شروع شدن، خطاها هم میگفتن که نمیشه ستون جدیدی با مقدار نال در این فیلد جدید به دیتابیس اضافه کرد
در واقع مقدار Null رو Unique در نظر میگرفت و برای مقادیر جدید، جلوی ثبت سطر جدید با مقدار Null رو میگرفت

با کمی جستجو به Filter Index رسیدیم که راه حل مشکل ما بود که میتونید دربارش در داکیومنت زیر مطالعه کنید

https://docs.microsoft.com/en-us/sql/relational-databases/indexes/create-filtered-indexes?view=sql-server-ver15

توسط این نوع از Index شما میتونید شرط بزارید که ایندکس در چه زمان هایی ساخته بشه. بطور مثال اگه یه فیلد دیگه فقط مقدار x رو داشت، ایندکس رو درست کن.
پس ما شرطی گذشتیم تا فقط برای مقادیر غیر Null در این فیلد جدید ایندکس ساخته بشه. برای اینکار میتونید شبیه عکس زیر تو قسمت Filter هر Index شرطی که میخواید رو بزارید
البته قبلش لینک بالا رو مطالعه کنید تا از پشتیبانی این نوع ایندکس در جدولی که میخواید مطمئن بشید


تو قسمت گفته شده کافیه شرطی که میخواید رو بزارید. بطور مثال :

[ISR] IS NOT NULL

یا اگه خواستید بصورت کوئری کار بالا رو انجام بدید میتونید بصورت زیر انجام بدید

CREATE UNIQUE NONCLUSTERED INDEX [FUIX_New_Re(ISR)] ON [new].[Re] ([ISR]) WHERE ([ISR] IS NOT NULL) ON [Tse]

لینک مطلب در وبلاگ

استفاده از unique index در ستون با مقدار null توسط Filter Index - روزمرگی های یک برنامه نویس (mhkarami97.ir)