Первичный ключ может разрешать 0 в зависимости от типа данных Первичного ключа. Автоматически сгенерированный PK (Identity) может начинаться с 0, но это не стандартное поведение, вам придется настроить его на начало с 0 (черт возьми, вы можете начать с отрицательных чисел, если хотите). Для достижения наилучших результатов это следует сделать до того, как вы начнете вводить данные в таблицу.
То, что вы не можете сделать, - это иметь несколько записей с 0 в качестве PK, поскольку это нарушает требование уникальности PK.
Если у вас есть существующие данные и вы хотите, чтобы запись имела нулевое значение для определенной цели (например, мы добавили пользователя для нашего процесса импорта, чтобы в поле insertby могло отображаться, что запись поступила из импорта), то, что вам, вероятно, нужно, это разрешить ручную вставку в поле идентификатора, чтобы вы могли ввести эту конкретную запись в нужное вам значение, а затем вернуться к обычным настройкам. Это делается так:
set Identity_insert dbo.table1 ON
insert dbo.table1 (id, myfield)
Values (0, 'test')
set Identity_insert dbo.table1 OFF
Не делайте этого в производственном коде приложения, это задача системного администратора, которую следует выполнять только изредка для установки определенной записи вне области обычных данных или для вставки записей, переносимых из другого источника ( когда вы знаете, что их существующие значения идентификаторов в настоящее время не используются). Это не должно легко использоваться, чтобы обойти ограничения поля идентичности. В частности, его никогда не следует использовать для заполнения записей, в которых пропущена идентификация (из-за удаления или отката), поскольку это противоречит цели использования идентификатора и может вызвать проблемы с целостностью данных, если не установлены надлежащие отношения PK / FK.