Напишите курсор для поиска и вставки - PullRequest
0 голосов
/ 28 мая 2020

У меня есть такие таблицы:

Main

id name   isedit 
1   kyle   0
2   jhon   1
3   dave   0

EditHistory

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;

I необходимо создать курсор, который будет проверять EditHistory для предыдущих строк с таким же idmain, и если такая строка есть, отредактируйте ее дату окончания на GETDATE() и вставьте в HistoryEdit, как в моей текущей вставке.

Я знаю, что это можно легко сделать с помощью IF, и именно так я бы это сделал. Но для этого мне нужно использовать курсор, и я никогда раньше не использовал курсор.

1 Ответ

0 голосов
/ 28 мая 2020

Я никогда раньше не использовал курсор.

Ну, не начинайте сейчас. Просто обновите старые строки, прежде чем вставлять новые:

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
...