Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

Unique columns to not NULL values

New in SQL SERVER 2008:
We can define an unique column, that NULL is not need to be unique, or in other words: the unique check is only for not NULL values.

CREATE UNIQUE NONCLUSTERED INDEX IX_TableName_UniqueColumn
ON dbo.TableName (UniqueColumn)
WHERE UniqueColumn IS NOT NULL
GO
 SELECT ID, UniqueColumn FROM TableName WHERE ID in (5, 6, 7)
-- for the example. lets say that the results are: 5, NULL ; 6, NULL ; 7, NULL.
UPDATE TableName SET UniqueColumn = 'test' WHERE ID = 5 --will be success
UPDATE TableName SET UniqueColumn = 'test' WHERE ID = 6 --will be failed
UPDATE TableName SET UniqueColumn = NULL WHERE ID = 5 --will be success

2 comments:

  1. Yes. True

    But, one thing, INDEX deffers from CONSTRAINTS. You have applied FILTER Unique INDEX, so It validates only the Filtered condition.. But, CONSTRAINTS are always Unique(Data, Blank , NULL(If the column is nullable,.....). Am I correct ?

    ReplyDelete
  2. I guess you right.
    But while we get to the target of Unique columns to not NULL values, so as I see it, it's doesn't really matter if we use a CONSTRAINT or an index.
    Thanks for the reply.

    ReplyDelete