sql - used - IDENTITY_INSERT está configurado en OFF-¿Cómo activarlo?
set identity_insert ejemplo (7)
Tengo una base de datos de archivos borrados que almacena el ID del archivo que se eliminó, quiero que el administrador pueda restaurar el archivo (así como también el mismo ID para vincular archivos). No quiero quitar identity_insert de toda la tabla, ya que el incremento en uno funciona muy bien. En mi inserción al procedimiento de almacenamiento TBL_Content
tengo algo como esto
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
SET IDENTITY_INSERT tbl_content ON
GO
ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int,
...insert command...
SET IDENTITY_INSERT tbl_content OFF
Pero sigo recibiendo el mismo error:
No se puede insertar un valor explícito para la columna de identidad en la tabla ''TBL_Content'' cuando IDENTITY_INSERT está establecido en OFF.
¿Alguna ayuda?
¿Debería establecer en su lugar la inserción de identidad dentro del procedimiento almacenado? Parece que lo está configurando solo al cambiar el procedimiento almacenado, no cuando lo está llamando realmente. Tratar:
ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int,
SET IDENTITY_INSERT tbl_content ON
...insert command...
SET IDENTITY_INSERT tbl_content OFF
GO
¿No deberías configurar identity_Insert ON, insertar los registros y luego volver a desactivarlo?
Me gusta esto:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
SET IDENTITY_INSERT tbl_content ON
GO
ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int,
SET IDENTITY_INSERT tbl_content ON
...insert command...
SET IDENTITY_INSERT tbl_content OFF
Añadir set off también
SET IDENTITY_INSERT Genre ON
INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,''Moody Blues'', 20)
SET IDENTITY_INSERT Genre OFF
Agregue esta línea encima de su consulta
SET IDENTITY_INSERT tbl_content ON
Creo que debe hacerse en un solo lote de consultas. Básicamente, las declaraciones GO están dividiendo tus comandos en varios lotes y eso está causando el problema. Cambiarlo a esto:
SET IDENTITY_INSERT tbl_content ON
/* GO */
...insert command...
SET IDENTITY_INSERT tbl_content OFF
GO
La referencia: http://technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx
Mi tabla se llama Genre
con las 3 columnas de Id
, Name
y SortOrder
El código que utilicé es como:
SET IDENTITY_INSERT Genre ON
INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,''Moody Blues'', 20)
Recordatorio
SQL Server solo permite que una tabla tenga la propiedad IDENTITY_INSERT establecida en ON.
Esto no funciona:
SET IDENTITY_INSERT TableA ON
SET IDENTITY_INSERT TableB ON
... INSERT ON TableA ...
... INSERT ON TableB ...
SET IDENTITY_INSERT TableA OFF
SET IDENTITY_INSERT TableB OFF
En lugar:
SET IDENTITY_INSERT TableA ON
... INSERT ON TableA ...
SET IDENTITY_INSERT TableA OFF
SET IDENTITY_INSERT TableB ON
... INSERT ON TableB ...
SET IDENTITY_INSERT TableB OFF