Move row from one table to another?

后端 未结 5 1246
没有蜡笔的小新
没有蜡笔的小新 2020-12-15 06:25

I have two tables with the same column definitions. I need to move (not copy) a row from one table to another. Before I go off and use INSERT INTO/DELETE (in a transaction

相关标签:
5条回答
  • 2020-12-15 07:03

    No, you are pretty much stuck with insert and delete wrapped inside a transaction

    0 讨论(0)
  • for SQL Server 2005 and up, try the OUTPUT Clause (Transact-SQL) clause:

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

    Working example:

    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
    

    OUTPUT:

                   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)
    
    0 讨论(0)
  • 2020-12-15 07:16

    You can try Insert into abc (a,b,c) select(a,b,c) from def

    doing above so will insert column a, b,c of def into column a,b,c of abc. after inserting run a delete table, drop table or truncate whatever is your criteria.

    sample is:

    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
    
    0 讨论(0)
  • 2020-12-15 07:17

    There is no such thing as a MOVE command in SQL. You'll have to first insert from table 1 to table 2 Then remove the copy from table 1.

    0 讨论(0)
  • 2020-12-15 07:26
    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
    
    0 讨论(0)
提交回复
热议问题