ejemplos - restriccion unique sql server
Copia de SQL sin especificar la lista de columnas; ignorando la identidad (2)
Estoy intentando copiar un registro de TableA de vuelta a TableA, pero usando una nueva Identidad. No deseo especificar la lista de columnas ya que tengo más de 100 columnas, y puede haber más en el futuro. Id como un trozo de código que se puede ejecutar cuando / si las cosas cambian.
Después de ver preguntas similares, he intentado este código
SELECT * INTO #tmp FROM TableA WHERE Id = 1;
ALTER TABLE #tmp DROP COLUMN Id;
INSERT INTO TableA SELECT * FROM #tmp;
Drop Table #tmp;
Todavía estoy recibiendo este error
An explicit value for the identity column in table ''dbo.TableA'' can only be specified when a column list is used and IDENTITY_INSERT is ON.
Ejecutar un Select * FROM #tmp me da lo que esperaría. Un solo registro con todas mis columnas, a excepción de la columna Id.
¿Algunas ideas?
¡Gracias!
EDITAR Aquí hay una imagen de las propiedades de la columna Id
Use SQL dinámico: obtenga su lista de columnas (excepto ID), cree una declaración de inserción usando esa lista y luego exec
en ella:
SELECT *
INTO #tmp
FROM TableA
WHERE Id = 1;
ALTER TABLE #tmp DROP COLUMN id;
DECLARE @cols varchar(max);
SELECT
@cols = COALESCE(@cols + '','', '''') + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ''TableA'' AND COLUMN_NAME <> ''id''
--select @cols -- display column list for debugging
DECLARE @sqltxt varchar(max) = ''INSERT INTO TableA ('' + @cols + '') SELECT * FROM #tmp'';
--SELECT @sqltxt -- display the statement for debugging
exec (@sqltxt)
DROP TABLE #tmp
Prueba esto
Paso 1 :
INSERT INTO Employee1(FirstName,LastName,ManagerID,Salary)
SELECT FirstName,LastName,ManagerID,Salary
FROM Employee1
WHERE EmployeeID=X -- Your Emplyee ID
Paso 2:
DELETE FROM Employee1 WHERE EmployeeID=X