Una clave principal puede permitir 0 dependiendo del curso en el tipo de datos de la clave primaria. Un PK (Identidad) autogenerado puede comenzar en 0, pero ese no es el comportamiento predeterminado, deberá configurarlo para que comience en 0 (por supuesto, puede comenzar con números negativos si lo desea). Para obtener los mejores resultados, esto debe hacerse antes de comenzar a ingresar datos en la tabla.
Lo que no puede hacer es tener varios registros con un 0 como PK, ya que eso infringe el requisito de exclusividad del PK.
Si tiene datos existentes y quiere un registro que tiene un valor de cero para un propósito específico (por ejemplo, colocamos un usuario para nuestro proceso de importación, para que el campo insertby pueda mostrar que el registro proviene de una importación) , entonces lo que probablemente quiera es permitir una inserción manual en el campo de identidad, para que pueda ingresar este registro específico al valor que desee y luego volver a la configuración habitual. Esto se hace de esta manera:
set Identity_insert dbo.table1 ON
insert dbo.table1 (id, myfield)
Values (0, 'test')
set Identity_insert dbo.table1 OFF
No hacer esto en el código de producción aplicación, este es un tipo de administración del sistema de la tarea que se debe hacer solamente de vez en cuando, ya sea para la configuración de un registro en particular fuera del alcance de la normalidad datos o para insertar registros que se transfieren desde otra fuente (cuando usted sabe que sus valores de ID existentes no se utilizan actualmente). Esto no se debe usar a la ligera para evitar las restricciones de un campo de identidad. En particular, nunca debe usarse para completar registros en los que se omitió la identidad (debido a una eliminación o reversión) ya que esto frustra el propósito de usar una identidad y puede causar problemas de integridad si no se establecieron relaciones PK/FK adecuadas.
Simplemente un comentario informativo. esta pregunta también se aplica a 'mySql' – dhpratik