Вычисляемый столбец — как первичный ключ

У меня есть следующий вычисляемый столбец в функции создания таблицы:

Create table test
(
Code1 nchar(10),
Code2 nchar (10),
Type nchar(10),
Final AS CASE WHEN LEN(Code1)>0 THEN Code1 WHEN LEN(Code2)>0 THEN Code2 ELSE Type END
);

Alter table test
add constraint PK_Test1
Primary Key (Final)

Но я получаю следующую ошибку

«Невозможно определить ограничение PRIMARY KEY для столбца, допускающего значение NULL, в таблице».

Это связано с тем, что Code 1, Code 2 и Type могут быть NULL, но все три никогда не будут NULL. Один из них всегда будет иметь значение.

Могу ли я в любом случае определить вычисляемый столбец как первичный ключ с учетом вышеизложенного?

Большое спасибо - JT


person JT_Singh    schedule 28.01.2016    source источник
comment
Как может семантика значения (т.е. одиночного пробела) отличаться от желаемого значения NULL для каждого из этих полей? Если нет, то просто сделайте их все НЕ NULL и используйте один пробел вместо значения NULL. Это также упростит поиск и логику объединения для этой таблицы повсюду.   -  person Pieter Geerkens    schedule 28.01.2016
comment
Если какой-либо ответ решил вашу проблему, вы можете пометить вопрос как ответ (слева от ответов должна быть галочка). Если ни один из них этого не сделал, отредактируйте свой вопрос, добавив больше деталей, чтобы на него можно было (правильно) ответить.   -  person Joachim Isaksson    schedule 31.01.2016


Ответы (2)


Ваш вычисляемый столбец должен быть сохранен, а NOT NULL должен использоваться в качестве первичного ключа;

Create table test
(
    Code1 nchar(10),
    Code2 nchar (10),
    Type nchar(10),
    Final AS CASE WHEN LEN(Code1)>0 THEN Code1 
                  WHEN LEN(Code2)>0 THEN Code2 
                  ELSE Type END 
          PERSISTED NOT NULL
);

SQLfiddle для тестирования.

person Joachim Isaksson    schedule 28.01.2016

Почему бы просто не использовать уникальное ограничение, так как

В отличие от ограничений PRIMARY KEY ограничения UNIQUE допускают значение NULL. Однако, как и в случае любого значения, участвующего в ограничении UNIQUE, для каждого столбца допускается только одно нулевое значение. На ограничение UNIQUE может ссылаться ограничение FOREIGN KEY.

person paparazzo    schedule 28.01.2016