2016-03-21 3 views
0

я создал триггер, как показано нижепосле обновления заявления спускового займут много времени

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. Никаких изменений не произошло. Уверен, что в курсоре есть проблема. Может ли кто-нибудь показать на нем какой-то свет.

**** Edited ****

На самом деле мне нужно проверить 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 is null и i.enddate не является нулевым, мне нужно выполнить другой запрос .. для этого конкретного saleid..это почему я использовал курсор .. – Sachu

+0

Не могли бы вы добавить это на свой вопрос, пожалуйста ... вы продолжаете добавлять сложность = p – mxix

+0

отредактированный вопрос..если условие правильное, мне нужно сгенерировать xml для продажи. .. если две строки обновлены, два xml-файла будут генерировать – Sachu

 Смежные вопросы

  • Нет связанных вопросов^_^