sql server - quitar - Establecer IDENTITY_INSERT ON no funciona
sql server identity_insert set to off (4)
Aquí está la redacción de Microsoft sobre el uso de SET IDENTITY_INSERT, que podría ser útil para que otros vean esta publicación si ellos, como yo, encuentran esta publicación cuando intentan recrear los registros eliminados mientras mantienen el valor de la columna de identidad original.
para volver a crear los registros eliminados con el valor de la columna de identidad original: http://msdn.microsoft.com/en-us/library/aa259221(v=sql.80).aspx
Quiero copiar una tabla Equipment
de una base de datos MyDBQA
a nuestra base de datos de prueba MyDB
. Hay una columna de identidad en la tabla que es la clave principal (int, not null).
Pero tengo un error:
Msg 8101, nivel 16, estado 1, línea 2
Un valor explícito para la columna de identidad en la tabla ''MyDB.dbo.Equipment'' solo se puede especificar cuando se utiliza una lista de columnas y IDENTITY_INSERT está activado.
Mi guion
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON
INSERT INTO [MyDB].[dbo].[Equipment] SELECT * FROM [MyDBQA].[dbo].[Equipment]
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF
En el código VB, al intentar enviar una consulta INSERT
, debe enviar una consulta doble en la misma ''executenonquery'' de esta manera:
sqlQuery = "SET IDENTITY_INSERT dbo.TheTable ON; INSERT INTO dbo.TheTable (Col1, COl2) VALUES (Val1, Val2); SET IDENTITY_INSERT dbo.TheTable OFF;"
Usé un ;
separador en lugar de GO.
Funciona para mi. Tarde pero eficiente!
La parte relevante del mensaje de error es
...when a column list is used...
No está utilizando una lista de columnas, está utilizando SELECT *
. Use una lista de columnas en su lugar:
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON
INSERT INTO [MyDB].[dbo].[Equipment] (Col1, Col2, ...)
SELECT Col1, Col2, ... FROM [MyDBQA].[dbo].[Equipment]
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF
Puede que solo le falte la lista de columnas, como dice el mensaje
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON
INSERT INTO [MyDB].[dbo].[Equipment]
(COL1,
COL2)
SELECT COL1,
COL2
FROM [MyDBQA].[dbo].[Equipment]
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF