Defining a UNIQUE constraint on a computed column is a straightforward process, as the following example shows:
CREATE TABLE T1 (col1 int NOT NULL,col2 AS col1 + 1 UNIQUE)
However, if you define a PRIMARY KEY on a computed column, such as:
CREATE TABLE T2 (col1 int NOT NULL,col2 AS col1 + 1 PRIMARY KEY)
You receive the following error:
Server: Msg 8111, Level 16, State 2, Line 1Cannot define PRIMARY KEY constraint on nullable column in table 'T2'.Server: Msg 1750, Level 16, State 1, Line 1Could not create constraint. See previous errors.
Because of the primary key constraint, SQL Server requires you to guarantee that your computation’s result will not be NULL. The computation in the computed column can overflow (for example, when you add 1 to the largest integer) or underflow (when you subtract 1 from the smallest integer), and other computations can result in a divide-by-zero error.
The trick is to wrap the computed column’s computation with the ISNULL() function and supply an alternative value if the computation results inNULL:
CREATE TABLE T2 (col1 int NOT NULL,col2 AS ISNULL(col1 + 1, 0) PRIMARY KEY)