2012-06-19 1 views
1

Можно ли индексировать постоянное поле?SQL Server 2008 - Вы можете индексировать постоянный столбец

При попытке изменить первичный ключ к сохраняемому полю или добавить первичный ключ в поле я сделал сохранялось поле, я получаю следующее:

Не удаюсь определить ограничение первичного ключа на обнуляемом столбце таблица 'tblOpportunityRecords'.

ответ

4

Чтобы вывести вычисляемое поле не нуль, вам необходимо помочь SQL Server выяснить, что никакие нули не возможны. Обычно это делается с помощью функции ISNULL, которая может использоваться для обеспечения того, чтобы полученное выражение не было равно NULL.

ISNULL(my_computation, 0) --the second arg should have the same type as the first one 

Обратите внимание, что вы не можете использовать COALESCE функцию (по причине, неизвестной мне - это просто не работает).

+0

Интересно - с 'ISNULL (...)' столбец действительно становится непустым и поэтому может использоваться для первичного ключа. Я все еще не ставил свой первичный ключ на такой вычисленный столбец, но это технически возможно. Спасибо, что поделились этим! –

+0

Это здорово, обработано, спасибо. – aSystemOverload

+0

Не знаете, что вы подразумеваете под «бросками»? –

0

Первичный ключ должен быть - по определению - NOT NULL и уникальным.

Но вы могут индексировать постоянную вычисленную колонку с регулярным некластеризованным индексом - абсолютно!

+0

Как я могу сделать постоянное поле без нулей, так как он не позволит вам изменить это для сохраняемых полей. Оба поля, на которые он ссылается, создают NO NULL. – aSystemOverload

+0

@aSystemOverload: я не думаю, что есть какой-либо способ сделать это - плюс я никогда не ставил свой первичный ключ в постоянный столбец .... используйте какой-то другой хороший первичный ключ - «ИДЕНТИФИКАЦИЯ INT» или что-то еще - и индексируйте свои вычисленный столбец с подходящим некластеризованным индексом! –

+0

У меня было это как INT, но количество записей значительно увеличится, и MS ACcess, который я использую в качестве интерфейса, не может получить доступ к полям данных bigint, поэтому это заставило меня рассмотреть постоянное поле. Записи повторяются историческими записями, поэтому в каждом наборе данных есть уникальное значение, поэтому я создал постоянное поле как DataSetID + UNiqueValue, которое было бы уникальным в таблице. – aSystemOverload

 Смежные вопросы

  • Нет связанных вопросов^_^