Copy rows from the same table and update the ID column

前端 未结 8 440
情歌与酒
情歌与酒 2021-02-01 02:09

I have the following table

\"alt

I have inserted Product B to it and it gives me an ID of 15

相关标签:
8条回答
  • 2021-02-01 02:39

    This will work with any column you choose. Not just primary key/ID.

    INSERT INTO TableName (Column1, CustomID, Column3, Column4, Column5)
    SELECT Column1, 'NewValue', Column3, Column4, Column5 FROM TableName
    WHERE CustomID='OrigValue'
    
    0 讨论(0)
  • 2021-02-01 02:48

    Can use MERGE on SQL Server 2008, has the advantage of using OUTPUT to return the DefID values, assuming they are auto-generated e.g.

    MERGE INTO ProductDefinition
    USING (
           SELECT 16, P1.Definition, P1.Description
             FROM ProductDefinition AS P1
            WHERE P1.ProdID = 15
          ) AS source (ProdID, Definition, Description)
    ON 0 = 1
    WHEN NOT MATCHED THEN
       INSERT (ProdID, Definition, Description)
       VALUES (ProdID, Definition, Description)
       OUTPUT inserted.DefID, inserted.ProdID, 
                 inserted.Definition, inserted.Description;
    
    0 讨论(0)
  • 2021-02-01 02:48

    if you want to select all items (in condition the table not contains any primary keys)

    INSERT INTO [tabelName]
    SELECT  * FROM    [tabelName]
    WHERE  (YourCondition)
    

    in condition the table contains a primary keys, select only the columns that not primary key Like:

    INSERT INTO [tabelName]
    SELECT  col_1,col_2,col_n FROM    [tabelName]
    WHERE  (YourCondition)
    
    0 讨论(0)
  • 2021-02-01 02:53

    If you want to replicate data in same table use this logic:

    first, insert statment where you want to insert...

    insert into [table](column1,column2)
    

    second, select statment from where you want to take data for insertion....

    select (column1/'your value',column2/'your value') from [table]
    

    now set filter which rows you want to duplicate

    where (your condition)
    

    as want to replicate same data for different customers i have used this query.

    0 讨论(0)
  • 2021-02-01 03:00

    Do you use Oracle? It does not have an automatic PK_generator, nothing to work for your INSERT silently. However, it has SEQUENCEs, so let's use its NEXTVAL:

    INSERT INTO Orders_tab (Orderno, Custno)
        VALUES (Order_seq.NEXTVAL, 1032);
    

    The INSERT operation is exactly the case for them, the purpose of a SEQUENCE, you just have to use it explicitly. More described: Managing Sequences # Using Sequences

    The node for Sequences is on the level of Tables, i.e. in the SQLdeveloper. Ours are ID_GENERATOR, in every DB.

    0 讨论(0)
  • 2021-02-01 03:04

    If your id is not autoincrement or declared sequence and if u dont want to create a temporary table:

    you can use:

    INSERT INTO Tabel1 SELECT ((ROW_NUMBER( ) OVER ( ORDER BY ID  )) + (SELECT  MAX(id) FROM Table1)) ,column2,coulmn3,'NewValue' FROM Tabel1 Where somecolumn='your value`
    
    0 讨论(0)
提交回复
热议问题