复制同一个表中的行并更新ID列

时间:2010-09-22 14:02:32

标签: sql sql-server

我有下表

alt text

我已将产品B插入其中,它给我一个15

的ID

然后我有定义表,如下所示。

alt text

我想选择ProdID = 14的ProductDefinition行并复制它们并将其插入ProdID = 15,如下所示

alt text

如何使用SQL代码实现这一目标?

8 个答案:

答案 0 :(得分:53)

INSERT INTO ProuctDefinition (ProdID, Definition, Desc)
SELECT
  xxx, Definition, Desc
FROM
  ProductDefinition
WHERE
  ProdID = yyy

xxx是您的新ProdID,yyy是您的旧版本。这也假定在DefID上自动填充INSERT

答案 1 :(得分:9)

这适用于您选择的任何列。不只是主键/ ID。

INSERT INTO TableName (Column1, CustomID, Column3, Column4, Column5)
SELECT Column1, 'NewValue', Column3, Column4, Column5 FROM TableName
WHERE CustomID='OrigValue'

答案 2 :(得分:3)

可以在SQL Server 2008上使用MERGE,使用OUTPUT返回DefID值,假设它们是自动生成的,例如

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;

答案 3 :(得分:2)

如果要选择所有项目(条件是表格中不包含任何主键)

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

在表中包含主键的情况下,只选择不是主键的列:

INSERT INTO [tabelName]
SELECT  col_1,col_2,col_n FROM    [tabelName]
WHERE  (YourCondition)

答案 4 :(得分:1)

如果要在同一个表中复制数据,请使用以下逻辑:

首先,在您要插入的位置插入陈述......

insert into [table](column1,column2)

第二步,选择要从中取数据进行插入的状态....

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

现在设置过滤要复制的行

where (your condition)

因为我想使用此查询为不同的客户复制相同的数据。

答案 5 :(得分:1)

如果您的id不是自动增量或声明的序列,并且您不想创建临时表:

你可以使用:

INSERT INTO Tabel1 SELECT ((ROW_NUMBER( ) OVER ( ORDER BY ID  )) + (SELECT  MAX(id) FROM Table1)) ,column2,coulmn3,'NewValue' FROM Tabel1 Where somecolumn='your value`

答案 6 :(得分:0)

您使用 Oracle 吗?它没有自动PK_generator,对于您的INSERT而言,无任何工作。但是,它具有SEQUENCE,因此我们使用其NEXTVAL

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

对于他们来说,INSERT操作就是这种情况,SEQUENCE的目的就是,您只需显式地使用它即可。详细说明:Managing Sequences # Using Sequences

Sequences节点在Tables级别上,即在SQLdeveloper中。我们在每个数据库中都是ID_GENERATOR

答案 7 :(得分:0)

@testing-library