3

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

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) 

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

«Невозможно определить ограничение первичного ключа на обнуляемом колонке в таблице ".

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

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

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

+0

Каким образом семантика значения "" (т. Е. Одиночного пространства) когда-либо отличалась от желаемой величины NULL для каждого из этих полей? Если нет, то просто сделайте их НЕ NOT NULL и используйте одно место вместо значения NULL. Это также упростит ваш поиск и логику соединения для этой таблицы везде. –

+0

Если какой-либо ответ решил вашу проблему, вы можете пометить вопрос как ответ (там должен быть флажок слева от ответов). Если ни один из них не сделал, отредактируйте свой вопрос, чтобы добавить более подробную информацию, чтобы можно было (правильно) ответить. –

ответ

1

Ваш вычисляемый столбец должен быть сохранен и 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 
); 

An SQLfiddle to test with.

1

Почему бы просто не использовать unique constraint как это позволит нулевой

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