SQL服务器游标运行两次

时间:2017-06-19 05:07:01

标签: sql sql-server

假设我有一个光标,可以找到要更新的数据,

declare @index int;
declare cursor1 cursor for
select table1_index from table where (table1_date < dateadd(dd, -365, getdate()))

open cursor1 
fetch next from cursor1 into @index
while @@fetch_status = 0
begin
  update table1
  set table1_field = SOMETHING
  where table1_index = @index

  if @ERROR = 0
  insert into audit_trail
  values(getdate(), table1_index)

  fetch next from cursor1 into @index
end
close cursor1 
deallocate cursor1 

以上代码位于存储过程中,每天由调度程序运行(例如每天凌晨12:00)。

我的问题是,如果调度程序运行存储的专业版。在一段时间内(例如,17/06/2017 12:00),仍然在运行(例如在17/06/2017 05:00 PM)。

如果我运行完全相同的代码(例如17/06/2017 03:00 PM), 光标会从更新的表格中选出数据吗?或者表中没有由调度程序更新的数据?

非常感谢。

1 个答案:

答案 0 :(得分:1)

declare cursor1 cursor for
select table1_index from table where (table1_date < dateadd(dd, -365, getdate())) 
and table1_index NOT IN (SELECT table1_index FROM audit_trail)

您需要添加条件and table1_index NOT IN (SELECT table1_index FROM audit_trail)。我希望它对你有用。