Pregunta

En mi eternal saga para insertar 1,4 millones de filas de datos de un script SQL , He escrito una aplicación básica de WinForms que toma cada línea del script y la ejecuta de forma individual.

Sin embargo, porque el script original contenía

SET IDENTITY_INSERT [Table] OFF

y SET es un comando para toda la sesión, esta configuración se está perdiendo en cada llamada a SQL, lo que significa que cada línea está fallando. ¿Hay alguna manera de desactivar IDENTITY_INSERT para toda la tabla, en toda la base de datos solo para que pueda hacer estas llamadas individuales sin que fallen? ¿O tal vez puedo decirle que ignore la especificación de identidad agregando un comando a cada línea?

¿Fue útil?

Solución

INSERCIÓN A GRANEL no funcionará para usted? O el Asistente de importación / exportación de SQL Server ( aquí o here )? Sé que la importación / exportación puede desactivar la inserción de identidad para toda la importación. Estoy razonablemente seguro de que puedes hacerlo justo antes de BULK INSERT

Otros consejos

Creo que IDENTITY INSERT solo se puede anular una tabla a la vez, por sesión.

Tendrá que tal vez agrupar 2 o 300 instrucciones de inserción a la vez y preceder a cada lote con la inserción de identificación.

para que la aplicación ejecute un bloque como este ...

SET IDENTITY_INSERT [Table] OFF;
INSERT INTO TABLE VALUES (1, 'a');
INSERT INTO TABLE VALUES (2, 'b');
INSERT INTO TABLE VALUES (3, 'c');
INSERT INTO TABLE VALUES (4, 'd');
INSERT INTO TABLE VALUES (5, 'e');
SET IDENTITY_INSERT [Table] ON;

¿Hay alguna otra cosa que vaya a acceder / insertarse en la tabla mientras que esto es 1.4 millones de trabajos de inserción?

Si no, ¿podría simplemente deshabilitar la identidad en la columna PK durante la duración del trabajo?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top