Tengo el siguiente error cuando ejecuto el siguiente script. ¿De qué se trata el error y cómo se puede resolver?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
Error:
Servidor: Msg 544, Nivel 16, Estado 1, Línea 1
No se puede insertar un valor explícito para la columna de identidad en la tabla 'tabla' cuando IDENTITY_INSERT está establecido en OFF.
sql
sql-server
sybase
Martin Clayton
fuente
fuente
Respuestas:
Estás insertando valores para
OperationId
eso es una columna de identidad.Puede activar la inserción de identidad en la tabla de esta manera para que pueda especificar sus propios valores de identidad.
fuente
no ponga valor a OperationID porque se generará automáticamente. prueba esto:
fuente
esto funciona solo en una sola tabla de base de datos, por ejemplo, si el nombre de la tabla es estudiante, la consulta se verá así
SET IDENTITY_INSERT student ON
fuente
Tenga mucho cuidado de establecer IDENTITY_INSERT en ON. Esta es una mala práctica a menos que la base de datos esté en modo de mantenimiento y configurada para un solo usuario. Esto afecta no solo a su inserción, sino a las de cualquier otra persona que intente acceder a la tabla.
¿Por qué estás tratando de poner un valor en un campo de identidad?
fuente
Básicamente, hay 2 formas diferentes de INSERTAR registros sin tener un error:
1) Cuando IDENTITY_INSERT está desactivado. LA "ID" PRINCIPAL DE LA CLAVE NO DEBE ESTAR PRESENTE
2) Cuando IDENTITY_INSERT está activado. LA "ID" PRINCIPAL DE LA CLAVE DEBE ESTAR PRESENTE
Según el siguiente ejemplo de la misma tabla creada con una CLAVE PRIMARIA DE IDENTIDAD:
1) En el primer ejemplo, puede insertar nuevos registros en la tabla sin obtener un error cuando IDENTITY_INSERT está desactivado. La clave primaria "ID" no debe estar presente desde los estados "INSERT INTO" y un valor único de identificación se añadirá automáticamente: . Si la ID está presente desde INSERT en este caso, obtendrá el error "No se puede insertar un valor explícito para la columna de identificación en la tabla ..."
SALIDA de la TABLA [dbo]. [Personas] será:
2) En el segundo ejemplo, puede insertar nuevos registros en la tabla sin obtener un error cuando IDENTITY_INSERT está activado. La "ID" PRINCIPAL DE LA CLAVE DEBE ESTAR PRESENTE en las declaraciones "INSERT INTO" siempre que el valor de ID no exista : si la ID NO está presente desde INSERT en este caso, obtendrá el error "El valor explícito debe ser especificado para la tabla de columnas de identidad ... "
SALIDA de la TABLA [dbo]. [Personas] será:
fuente
En su entidad para esa tabla, agregue el
DatabaseGenerated
atributo encima de la columna para la que se establece la inserción de identidad:Ejemplo:
fuente
DatabaseGeneratedOption.Identity
y sigo recibiendo el error. Es mi culpa, estoy colocando pseudo-ID en las nuevas filas para distinguirlos unos de otros en mi página web, y espero simplemente anularlos antes de queinsert
sea suficiente.simplemente puede usar Esta declaración, por ejemplo, si el nombre de su tabla es Escuela . Antes de la inserción Asegúrese de que identity_insert se establece en EN y después de la inserción consulta a su vez identity_insert OFF
fuente
Si está utilizando liquibase para actualizar su SQL Server, es probable que esté intentando insertar una clave de registro en un campo autoIncrement. Al eliminar la columna de la inserción, su script debería ejecutarse.
fuente
Hay OperationId previamente mencionado en su consulta que no debería estar allí, ya que se autoincreamenta
entonces su consulta será
fuente
Otra situación es verificar que la Clave primaria sea el mismo nombre que con sus clases, donde la única diferencia es que su clave primaria tiene una 'ID' adjunta o especificar [Clave] en las claves primarias que no están relacionadas con cómo se nombra la clase
fuente
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
en su columna PrimaryKey y asegúrese de que esté establecida en un tipo de datos int . Si la columna es la clave principal y se establece en IsIDentity en verdadero en SQL, no es necesaria esta línea de código[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
fuente
La mejor solución es usar anotaciones
GeneratedValue(strategy = ...)
, es decirdice, que esta columna es generada por la base de datos usando la estrategia IDENTITY y no necesita ocuparse de eso, la base de datos lo hará.
fuente
Si tiene este problema mientras usa un servidor sql con el secuencialize-typecript npm, asegúrese de agregarlo
@AutoIncrement
a la columna ID:fuente
Y si está utilizando Oracle SQL Developer para conectarse, recuerde agregar / sqldev: stmt /
/ sqldev: stmt / set identity_insert TABLE en;
fuente
No estoy seguro de cuál es el uso de la "Insertar tabla", pero si solo está intentando insertar algunos valores, intente:
Me apareció el mismo mensaje de error, pero creo que esto debería funcionar. La ID debería incrementarse automáticamente automáticamente siempre que sea una clave principal.
fuente
Resolví este problema creando un nuevo objeto cada vez que quiero agregar algo a la base de datos.
fuente
Tenga en cuenta que si está cerrando cada línea con
;
, elSET IDENTITY_INSERT mytable ON
comando no se mantendrá para las siguientes líneas.es decir,
una consulta como
Da el error
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF.
Pero una consulta como esta funcionará:
Parece que el
SET IDENTITY_INSERT
comando solo se cumple para una transacción, y;
significará el final de una transacción.fuente
El problema surgió del uso de DBContext o DBSet no tipado si usa la interfaz e implementa el método de guardar cambios de forma genérica
Si este es su caso, propongo escribir DBContex fuertemente por ejemplo
entonces
.Savechanges
funcionaráfuente
Simplemente elimine las tablas que se arrastran a su archivo .dbml y vuelva a arrastrarlas. Luego, Limpiar solución> Reconstruir solución> Crear solución.
Eso fue lo que funcionó para mí.
No hice la tabla por mi cuenta, estaba usando VS y SSMS, seguí este enlace para ASP.NET Identity: https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/ agregando-aspnet-identity-to-an-empty-or-existentes-web-forms-project
fuente