Nuestros mejores investigadores han agotado sus depósitos de café, por su búsqueda diariamente por la solución, hasta que Asia halló la solución en Beanstalk así que hoy la compartimos aquí.
Solución:
SET IDENTITY_INSERT tableA ON
Tienes que hacer una lista de columnas para tu instrucción INSERT:
INSERT Into tableA ([id], [c2], [c3], [c4], [c5] )
SELECT [id], [c2], [c3], [c4], [c5] FROM tableB
no como “INSERT Into tableA SELECT ……..”
SET IDENTITY_INSERT tableA OFF
Resumen
SQL Server no le permitirá insertar un valor explícito en una columna de identidad a menos que use una lista de columnas. Así, tienes las siguientes opciones:
- Haga una lista de columnas (ya sea manualmente o usando herramientas, vea a continuación)
O
- hacer la columna de identidad en
tbl_A_archive
un habitual, no identidad columna: si su tabla es una tabla de archivo y siempre especifica un valor explícito para la columna de identidad, ¿por qué necesita una columna de identidad? Simplemente use un int regular en su lugar.
Detalles sobre la solución 1
En vez de
SET IDENTITY_INSERT archive_table ON;
INSERT INTO archive_table
SELECT *
FROM source_table;
SET IDENTITY_INSERT archive_table OFF;
tienes que escribir
SET IDENTITY_INSERT archive_table ON;
INSERT INTO archive_table (field1, field2, ...)
SELECT field1, field2, ...
FROM source_table;
SET IDENTITY_INSERT archive_table OFF;
con field1, field2, ...
que contiene los nombres de todas las columnas en sus tablas. Si desea generar automáticamente esa lista de columnas, eche un vistazo a la respuesta de Dave o la respuesta de Andomar.
Detalles sobre la solución 2
Desafortunadamente, no es posible simplemente “cambiar el tipo” de una columna int de identidad a una columna int sin identidad. Básicamente, tienes las siguientes opciones:
- Si la tabla de archivo aún no contiene datos, suelte la columna y agregue una nueva sin identidad.
O
- Utilice SQL Server Management Studio para configurar el
Identity Specification
/(Is Identity)
propiedad de la columna de identidad en su tabla de archivo paraNo
. Detrás de escena, esto creará una secuencia de comandos para volver a crear la tabla y copiar los datos existentes, por lo que, para hacerlo, también deberá desactivarTools
/Options
/Designers
/Table and Database Designers
/Prevent saving changes that require table re-creation
.
O
- Utilice una de las soluciones alternativas descritas en esta respuesta: Eliminar identidad de una columna en una tabla
Si está utilizando SQL Server Management Studio, no tiene que escribir la lista de columnas usted mismo, simplemente haga clic con el botón derecho en la tabla en Explorador de objetos y elige Tabla de scripts como -> SELECCIONA para -> Nueva ventana del editor de consultas.
Si no es así, entonces una consulta similar a esta debería ayudar como punto de partida:
SELECT SUBSTRING(
(SELECT ', ' + QUOTENAME(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'tbl_A'
ORDER BY ORDINAL_POSITION
FOR XML path('')),
3,
200000);
Aquí tienes las comentarios y puntuaciones
Recuerda que puedes difundir este enunciado si te ayudó.