我有下表:
我正在处理一个程序,该程序接受行 ID eg.5 并将其复制到 ID 为 6 的新行中。通过这样做,我必须将项目 6 的进程 ID 更新为 7、7 到 8、8 到 9 , 9 到 10 和 10 到 11。
这样做的最好方法是什么?
我对 SQL 操作一无所知,因此将不胜感激任何帮助。
假设您的 ID 始终是连续的,您需要UPDATE
在执行 new 之前先查看您的表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
. 如果您在此字段上有一个身份,那么这不一定有效。取决于您的表结构。
问题有点不清楚您是在寻找插入还是更新。对于插入,您可以使用以下方法执行以下操作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。