我创建了一个触发如下后触发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
当你说销售表只包含两行,即使你的光标(这是不需要的)不应该采取多time.did您检查任何锁定,通过以代替该光标阻塞 – TheGameiswar
启动简单加入... – mxix
@mxix其实我需要从插入和删除enddate来检查一些条件。 – Sachu