如何复制表中的行并更新sproc中前进行的ID?

时间:2013-03-28 16:18:27

标签: sql tsql

我有下表: enter image description here

我正在处理一个接受行ID的程序,例如5,并将其复制到ID为6的新行中。通过这样做,我必须更新项目6到7,7到8的进程ID, 8至9,9至10和10至11。

这样做的最佳方式是什么?

我对SQL操作完全无能为力,所以任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

假设您的ID始终是连续的,那么在执行新的UPDATE之前,您需要INSERT您的表:

UPDATE YourTable
SET ID = ID + 1
WHERE ID >= 6

然后,您可以运行INSERT语句来复制第5行。

据说,这是什么目的?重新考虑您的桌面设计可能更有意义。

编辑 - 如果您还需要插入

如果您还需要执行INSERT,那么这应该可以使用INSERT INTO

INSERT INTO YourTable 
SELECT 6, NextCol, NextCol, ...
FROM YourTable
WHERE ID = 5

基本上你必须提供每一列。但是,再次运行UPDATE后运行此命令。如果您在此字段上有标识,那么这不一定有效。取决于你的桌面结构。

答案 1 :(得分:0)

有关您是否正在寻找插入或更新的问题有点不清楚。对于插入内容,您可以使用cross join

执行以下操作

Sql-Fiddle Demo

insert into YourTable (ID, SupplierId, Title,...)
select MyID, SupplierId, Title, ...
from YourTable cross join (values (6),(7),(8),(9),(10),(11)) 
          AS temp(MyId)
where YourTable.ID = 5

如果ID是自动递增的字段,则从字段列表中删除ID和MyID。