2016-03-21 92 views
0

我创建了一个触发如下后触发update语句采取

alter trigger sale_Trigger_Update on sale 
after update 
as 
begin 
Declare @old_value varchar(50) 
Declare @new_value varchar(50) 
Declare @sale_id UNIQUEIDENTIFIER 

DECLARE new_cur CURSOR FORWARD_ONLY READ_ONLY LOCAL FOR 
     SELECT saleid 
     FROM INSERTED 

    open new_cur 

      Fetch Next from new_cur into @sale_id 
     while @@FETCH_STATUS = 0 
     Begin 
      set @old_value = (select enddate from deleted where SaleID = @sale_id) 
      set @new_value = (select enddate from inserted where SaleID = @sale_id) 
      insert into zzz (old_value,new_value) values(@old_value,@new_value) 
     end 
     CLOSE new_cur 
    DEALLOCATE new_cur 

    end 

很长一段时间。然后我做了一个更新语句如下

update sale 
    set enddate = null 

Sale表只包含2

和执行继续无限。

我试图

update sale 
set enddate = null 
where saleid = 10 

同样的问题。

然后我强行停止执行。然后检查sale表和zzz表。没有发生变化。 我相信游标中存在一些问题。有人可以展示一些光。

**** ****编辑

其实我需要检查enddate in deleted is null and enddate in inserted is not null

open new_cur 

       Fetch Next from new_cur into @sale_id 
      while @@FETCH_STATUS = 0 
      Begin 
       set @old_value = (select enddate from deleted where SaleID = @sale_id) 
       set @new_value = (select enddate from inserted where SaleID = @sale_id) 
      if @old_value = null and @new_value != null 
      begin 
       SELECT approval.*, 
(select diag.* 
from diag diag 
where approval.id =diag.id 
FOR XML PATH('diag'), TYPE 
), 
(select ser.* 
from ser ser 
where approval.id =ser.id 
FOR XML PATH('ser'), TYPE 
) 
FROM approval approval, 
where approval.id = 1 
and approval.saleid [email protected] 
FOR XML PATH, ELEMENTS, 
root('Head') 
      end if 
      end 
      CLOSE new_cur 
     DEALLOCATE new_cur 
+0

当你说销售表只包含两行,即使你的光标(这是不需要的)不应该采取多time.did您检查任何锁定,通过以代替该光标阻塞 – TheGameiswar

+0

启动简单加入... – mxix

+0

@mxix其实我需要从插入和删除enddate来检查一些条件。 – Sachu

回答

0

关于光标。

你可以用你的扳机代替吗?

alter trigger sale_Trigger_Update on sale 
after update 
as 
begin 

insert into zzz (old_value,new_value) 
select 
    --i.SalesID, 
    d.enddate, 
    i.enddate 
from inserted i 
inner join deleted d on 
    i.SaleID = d.SaleID 
where 
    d.enddate is null and 
    i.enddate is not null 
end 
+0

如果d.enddate是空的,而且日期是空的,我需要执行另一个查询..对于特定的saleid ..这就是为什么我用光标.. – Sachu

+0

你可以添加到你的问题,请...你不断增加复杂性= P – mxix

+0

编辑问题..如果条件是正确的,我需要生成一个xml销售..如果两行更新两个XML文件将生成 – Sachu