type quitar off identity_insert como sql-server sql-server-2008 tsql

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