2010-06-24 16 views
68

Tengo una base de datos de archivo de archivo eliminada que almacena la ID del archivo que se eliminó, quiero que el administrador pueda restaurar el archivo (así como la misma 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 a TBL_Content proceso de almacenamiento Tengo algo como estoIDENTITY_INSERT está establecido en OFF - ¿Cómo activarlo?

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 obteniendo el mismo error:

Cannot insert explicit value for identity column in table 'TBL_Content' when IDENTITY_INSERT is set to OFF.

Cualquier ayuda?

Respuesta

108

en caso de que en lugar de estar fijándose la inserción de identidad con el dentro del procedimiento almacenado? Parece que lo está configurando solo al cambiar el procedimiento almacenado, no cuando lo está llamando realmente. Proveedores:

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent] 
@ContentID int, 

SET IDENTITY_INSERT tbl_content ON 

...insert command... 

SET IDENTITY_INSERT tbl_content OFF 
GO 
9

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 
+1

Se derecha. ¡Este es el punto! El siguiente lote de comando para insertar debe comenzar con SET IDENTITY_INSERT tbl_content ON; comando otra vez – Jettero

15

No deberías estar poniendo IDENTITY_INSERT ON, la inserción de los registros y, después, volviendo fuera?

De esta manera:

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 
3

Agregue esta línea encima de usted Consulta

SET IDENTITY_INSERT tbl_content ON 
9

Recordatorio

SQL Server sólo permite una tabla para tener la propiedad IDENTITY_INSERT 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 

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 
Cuestiones relacionadas