restricciones restriccion ejemplos check sql sql-server copy primary-key identity

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