CREATE TABLE T1 ( ID INT IDENTITY(1,1) PRIMARY KEY, TITLE VARCHAR(20), TITLE_COMP AS CASE WHEN TITLE IS NULL THEN CAST(ID AS VARCHAR(20)) ELSE TITLE END) GO
CREATE UNIQUE INDEX UQ_T1_1 ON T1 (TITLE_COMP) GO
INSERT INTO T1 (TITLE) VALUES ('Ravi'); INSERT INTO T1 (TITLE) VALUES ('Amit'); INSERT INTO T1 (TITLE) VALUES (NULL);
ID TITLE TITLE_COMP 1 Ravi Ravi 2 Amit Amit 3 NULL 3
CREATE TABLE T1 ( ID INT IDENTITY(1,1) PRIMARY KEY, TITLE VARCHAR(20), TITLE_COMP AS CASE WHEN TITLE IS NULL THEN -1*ID ELSE TITLE END) GO
INSERT INTO T1 (TITLE) VALUES (NULL);
INSERT INTO T1 (TITLE) VALUES ('Ravi');
INSERT INTO T1 (TITLE) VALUES ('Ashok');
SET NUMERIC_ROUNDABORT OFF; SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON; GO CREATE TABLE T1 (ID INT, TITLE VARCHAR(20)) GO CREATE VIEW V1 WITH SCHEMABINDING AS SELECT ID, TITLE FROM dbo.T1 WHERE ID IS NOT NULL GO --Create an UNIQUE clustered index on the view. CREATE UNIQUE CLUSTERED INDEX CI_V1_ID ON dbo.v1 (id) WITH (IGNORE_DUP_KEY = OFF); GO
CREATE UNIQUE NONCLUSTERED INDEX ON dbo.T1(TITLE) WHERE TITLE IS NOT NULL; GO
Thank you very much for the explanation and examples. Solution 3 was the best option for me. I did need to put in the index name.
Here's the example with the index name:
1 CREATE UNIQUE NONCLUSTERED INDEX idx_unique_title ON dbo.T1(TITLE)2 WHERE TITLE IS NOT NULL;3 GO
Leave a comment