2011-04-26 19 views
13

¿Cuál es el alcance de SET IDENTITY_INSERT xyz ON?¿Cuál es el alcance de SET IDENTITY_INSERT xyz ON?

Si utilizo esto en un procedimiento almacenado para una determinada tabla, ¿qué sucede si un usuario diferente que ejecuta un procedimiento diferente, se inserta en esa tabla determinada al mismo tiempo?

Además, ¿qué ocurre si diferentes usuarios/procedimientos tratan de establecer SET IDENTITY_INSERT xyz ON para diferentes mesas al mismo tiempo?

+0

Sería muy cuidadoso de hacer esto pase lo que pase. Se supone que la inserción de Set_identity solo se realiza con poca frecuencia y para la importación ocasional de datos que se mueven desde otro sistema que debe conservar su identidad por lo general solo cuando se inicializa el sistema. Es una práctica muy pobre usar esto en una aplicación. ¿Qué sucede si dos usuarios desean insertar el mismo valor para diferentes registros? Existe una razón por la cual las identidades se autogeneran y deberían seguir así o no deberían usarse. – HLGEM

+1

@HLGEM, esto es parte de una función de restauración, donde los datos eliminados se vuelven a agregar (copiados de una tabla de registro histórico) – RacerX

Respuesta

11

es una opción de sesión de una tabla sólo puede tener la opción de para una sola mesa a la vez, sino varias sesiones diferentes puede tener en la misma mesa (no estoy seguro de que volvería a ser una buena idea, aunque!)

Cuando termina un lote hijo (que establece esta opción), parece que se desconecta automáticamente para la conexión.

CREATE TABLE Tst 
(C INT IDENTITY(1,1)) 

EXEC('SET IDENTITY_INSERT Tst ON') 
INSERT INTO Tst(C) VALUES (1) /*Fails - Complains IDENTITY_INSERT is off*/ 

SET IDENTITY_INSERT Tst ON 
EXEC('INSERT INTO Tst(C) VALUES (1)') /*Succeeds this way round*/ 
SET IDENTITY_INSERT Tst OFF 
+0

realiza una sesión = conexión? – RacerX

+0

@RacerX - Sí, pero vea mi comentario sobre cómo se restablece a medida que sube la pila de llamadas. –

3

Mi prueba (SQL 2008 R2) muestra que la especificación de la identidad en una columna todavía entrega los valores correctos en una sesión, incluso si la tabla tiene IDENTITY_INSERT ON en otra sesión.

Debería poder insertar datos en la tabla con valores de columna de identidad específicos en una sesión (con IDENTITY_INSERT ON) mientras que otro usuario (en otra sesión) depende de la columna de identidad para funcionar normalmente.

Cuestiones relacionadas