我有下表:
我正在处理一个接受行ID的程序,例如5,并将其复制到ID为6的新行中。通过这样做,我必须更新项目6到7,7到8的进程ID, 8至9,9至10和10至11。
这样做的最佳方式是什么?
我对SQL操作完全无能为力,所以任何帮助都会非常感激。
答案 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
:
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。