transponer pasar multiples filas ejemplos convertir columnas sql-server sql-server-2005 insert-into

sql server - pasar - ¿Mover fila de una tabla a otra?



pivot y unpivot sql server (5)

No hay tal cosa como un comando MOVE en SQL. Primero deberá insertar de la tabla 1 a la tabla 2 y luego quitar la copia de la tabla 1.

Tengo dos tablas con las mismas definiciones de columna. Necesito mover (no copiar) una fila de una tabla a otra. Antes de apagar y usar INSERT INTO / DELETE (en una transacción), ¿hay alguna forma más inteligente?

SQL Server 2005


No, usted está bastante atascado con insertar y eliminar envuelto dentro de una transacción


Puede intentar Insertar en abc (a, b, c) seleccionar (a, b, c) desde la definición

haciendo lo anterior, se insertará la columna a, b, c de def en la columna a, b, c de abc. después de insertar, ejecute una tabla de eliminación, tabla de eliminación o truncar cualquiera que sea su criterio.

muestra es:

Begin Begin try Begin Transaction Insert into emp(name, department, salary) Select empName,empDepartment,empSal from employees Where employees.empID = 211 Truncate table employees End Transaction End try Begin Catch if @@Error > 0 Rollback Transaction End Catch End


para SQL Server 2005 y versiones posteriores, pruebe la cláusula de la cláusula de salida (Transact-SQL) :

DELETE OldTable OUTPUT DELETED.col1, DELETED.col2... INTO NewTable WHERE ID=...

Ejemplo de trabajo:

DECLARE @OldTable table(col1 int, col2 varchar(5), col3 char(5), col4 datetime) DECLARE @NewTable table(col1 int, column2 varchar(5), col3 int , col_date char(23), extravalue int, othervalue varchar(5)) INSERT @OldTable VALUES (1 , ''AAA'' ,''A'' ,''1/1/2010'' ) INSERT @OldTable VALUES (2 , ''BBB'' ,''12'' ,''2010-02-02 10:11:22'') INSERT @OldTable VALUES (3 , ''CCC'' ,null ,null ) INSERT @OldTable VALUES (4 , ''B'' ,''bb'' ,''2010-03-02'' ) DELETE @OldTable OUTPUT DELETED.col1 ,DELETED.col2 ,CASE WHEN ISNUMERIC(DELETED.col3)=1 THEN DELETED.col3 ELSE NULL END ,DELETED.col4 ,CONVERT(varchar(5),DELETED.col1)+''!!'' INTO @NewTable (col1, column2, col3, col_date, othervalue) OUTPUT ''Rows Deleted: '', DELETED.* --this line returns a result set shown in the OUTPUT below WHERE col1 IN (2,4) SELECT * FROM @NewTable

SALIDA:

col1 col2 col3 col4 -------------- ----------- ----- ----- ----------------------- Rows Deleted: 2 BBB 12 2010-02-02 10:11:22.000 Rows Deleted: 4 B bb 2010-03-02 00:00:00.000 (2 row(s) affected) col1 column2 col3 col_date extravalue othervalue ----------- ------- ----------- ----------------------- ----------- ---------- 2 BBB 12 Feb 2 2010 10:11AM NULL 2!! 4 B NULL Mar 2 2010 12:00AM NULL 4!! (2 row(s) affected)


INSERT dbo.newtable( name, department, Salary ) SELECT name, FirstName, Lastname FROM ( DELETE dbo.oldtable OUTPUT DELETED.name, DELETED.department, DELETED.Salary WHERE ID IN ( 1001, 1003, 1005 ) ) AS RowsToMove SELECT * FROM dbo.newtable SELECT * FROM dbo.oldtable