我有这样的表。
主表
id name isedit
1 kyle 0
2 jhon 1
3 dave 0
编辑历史
id idmain name isedit Begin end
1 2 jhon 0 28.05.2020 18:30 28.05.2020 18:35
2 2 jhon 0 28.05.2020 18:35 NULL
3 1 kyle 0 27.05.2020 12:03 NULL
我目前使用的是触发器。
(…) if update(isedit) and exists (
select 1
from Inserted I
where design = 0
) begin
Insert into dbo.HistoryEdit
([idmain][name][isedit][Begin][end]) SELECT id, name, iedit, GETDATE(), null
from Inserted
end;
我需要创建一个光标,将检查通过 EditHistory
前几行相同的 idmain
如果有这样的行,编辑其结束日期为 GETDATE()
并插入 HistoryEdit
如我现在的插入。
我知道用IF可以很容易做到,我也会这样做。但我必须使用游标,而我以前从未使用过游标。
我从来没有用过光标。
好了,现在不要开始了。 先更新旧的行再插入新的行就可以了。
declare @d datetime = GetDate()
update EditHistory set end = @d
where id in (select id from inserted)
and end is null;
Insert into dbo.HistoryEdit
([idmain][name][isedit][Begin][end])
SELECT id, name, iedit, @d, null
from Inserted