used - ¿Cómo activar y desactivar IDENTITY_INSERT con SQL Server 2008?
set identity_insert ejemplo (7)
A través de SQL según MSDN
SET IDENTITY_INSERT sometableWithIdentity ON
INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)
SET IDENTITY_INSERT sometableWithIdentity OFF
El mensaje de error completo le dice exactamente lo que está mal ...
No se puede insertar un valor explícito para la columna de identidad en la tabla ''sometableWithIdentity'' cuando IDENTITY_INSERT está desactivado.
¿Por qué me aparece un error al hacer una inserción cuando IDENTITY_INSERT
está desactivado?
¿Cómo lo enciendo correctamente en SQL Server 2008? ¿Es mediante el uso de SQL Server Management Studio?
He ejecutado esta consulta:
SET IDENTITY_INSERT Database. dbo. Baskets ON
Luego recibí el mensaje en la consola de que los comandos se completaron correctamente. Sin embargo, cuando ejecuto la aplicación, todavía me da el error que se muestra a continuación:
Cannot insert explicit value for identity column in table ''Baskets'' when
IDENTITY_INSERT is set to OFF.
Debe agregar el comando ''ir'' después de configurar la inserción de identidad. Ejemplo:
SET IDENTITY_INSERT sometableWithIdentity ON
go
INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)
SET IDENTITY_INSERT sometableWithIdentity OFF
go
Esto es probable cuando tiene un campo CLAVE PRINCIPAL y está insertando un valor que está duplicando o tiene el indicador INSERT_IDENTITY establecido en
Parece necesario colocar una base de datos SET IDENTITY_INSERT. dbo Cestas ON; antes de cada lote de envío de SQL INSERT. / Puede enviar varios comandos INSERT ... VALUES .. iniciados con un SET IDENTITY_INSERT ... ON; cadena al principio. Simplemente no ponga ningún separador de lotes entre / No sé por qué SET IDENTITY_INSERT ... ON deja de funcionar, después del bloque de envío (por ejemplo: .ExecuteNonQuery () en c #) ... Tuve que poner SET IDENTITY_INSERT ... ON; de nuevo al comienzo de la siguiente cadena de comandos SQL.
Sé que este es un hilo más viejo pero me topé con esto. Si el usuario está tratando de ejecutar inserciones en la columna de Identidad después de alguna otra sesión, establezca IDENTITY_INSERT ENCENDIDO, entonces está obligado a obtener el error anterior.
La configuración del valor de inserción de identidad y los siguientes comandos de inserción de DML se ejecutarán en la misma sesión.
Aquí @Beginner estaba configurando Identity Insert ON por separado y luego ejecutando los insertos desde su aplicación. Es por eso que obtuvo el siguiente error:
Cannot insert explicit value for identity column in table ''Baskets'' when
IDENTITY_INSERT is set to OFF.
Tuve un problema en el que no me permitía insertarlo incluso después de configurar IDENTITY_INSERT.
El problema fue que no especifiqué los nombres de las columnas y por alguna razón no me gustó.
INSERT INTO tbl Values(vals)
Así que, básicamente, hacer el completo INSERT INTO tbl (cols) Valores (vals)
Importar: debes escribir columnas en la INSERT
INSERT INTO TABLE
SELECT * FROM
No es correcto.
Insert into Table(Field1,...)
Select (Field1,...) from TABLE
Es correcto