写一个光标来搜索和插入

问题描述 投票:0回答:1

我有这样的表。

主表

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可以很容易做到,我也会这样做。但我必须使用游标,而我以前从未使用过游标。

sql sql-server cursor database-cursor
1个回答
0
投票

我从来没有用过光标。

好了,现在不要开始了。 先更新旧的行再插入新的行就可以了。

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
© www.soinside.com 2019 - 2024. All rights reserved.