i have a situation where i want to add unique constaint only when there is a certain value in other field for example the table is ID CategoryName Name Value CategoryID
One way to achieve this would be to have two tables, one for categoryId
0 and one for the rest. You can define the uniqueness constraint on the first table, and use a view and union any time you want to use them as a single table.
CREATE UNIQUE NONCLUSTERED INDEX [UQ_ID_CategoryName_Name, CategoryName, Name] ON TableName
(
ID, CategoryName, Name
)
WHERE (CategoryID = 0)
Create a filtered unique index on Name
for CategoryID = 0
.