Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как обойти (Вызов триггера в exec sp_executesql)  [new]
Atomic
Member

Откуда: Москва
Сообщений: 16
Подскажите как обойти

Есть Веб(java) приложение, которое при изменении поля показывает (в профайлере) две следующих записи
exec sp_executesql N'UPDATE WorkOrderStates SET OWNERID= @P0 , ASSIGNEDTIME= @P1 , ISREAD= @P2 , WHERE ( (WorkOrderStates.WORKORDERID = @P4 ) )',N'@P0 bigint,@P1 bigint,@P2 bit,@P4 bigint',10,1426321296411,2639

IF @@TRANCOUNT > 0 COMMIT TRAN


Мне нужно сделать доп триггер, который при совпадении условий добавит запись в другую таблицу
моя реализация не работает. Веб приложение просто подвисает при нажатии на ОК. Т.е. кнопка не отжимается, похоже не получает подтверждение завершения транзакции.

ALTER TRIGGER [dbo].[WorkOrder_Upd_Trigger]
ON [dbo].[WorkOrderStates]
AFTER UPDATE
AS

IF (SELECT WORKORDERID from WorkOrderStates where CATEGORYID=601 and OWNERID is not NULL) is not null

BEGIN
declare @orderId_new bigint
set @orderId_new = (SELECT WORKORDERID from updated)
INSERT INTO ZZZ_TST VALUES (@orderId_new, 601)
END
14 мар 15, 11:44    [17383834]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти (Вызов триггера в exec sp_executesql)  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
Atomic,

Триггер конечно говнокод
В начале поставить set no count on
Insert into zzzz (ordernew, field)
Select workspaceid,601 from inserted
14 мар 15, 12:01    [17383853]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти (Вызов триггера в exec sp_executesql)  [new]
updated
Guest
Atomic
ALTER TRIGGER [dbo].[WorkOrder_Upd_Trigger]
ON [dbo].[WorkOrderStates]
AFTER UPDATE
AS

IF (SELECT WORKORDERID from WorkOrderStates where CATEGORYID=601 and OWNERID is not NULL) is not null

BEGIN
declare @orderId_new bigint
set @orderId_new = (SELECT WORKORDERID from updated)
INSERT INTO ZZZ_TST VALUES (@orderId_new, 601)
END
WTF ??!
14 мар 15, 12:17    [17383868]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти (Вызов триггера в exec sp_executesql)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
updated
Atomic
ALTER TRIGGER [dbo].[WorkOrder_Upd_Trigger]
ON [dbo].[WorkOrderStates]
AFTER UPDATE
AS

IF (SELECT WORKORDERID from WorkOrderStates where CATEGORYID=601 and OWNERID is not NULL) is not null

BEGIN
declare @orderId_new bigint
set @orderId_new = (SELECT WORKORDERID from updated)
INSERT INTO ZZZ_TST VALUES (@orderId_new, 601)
END
WTF ??!
То только микроскопическая часть ошибок в показанном нам "запросе".
Чего стоит только запятая перед WHERE!
Или применение SET с подзапросом, который может вернуть несколько записей.
Или проверка результата подселекта на NOT NULL вместо EXISTS().
14 мар 15, 14:06    [17384029]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти (Вызов триггера в exec sp_executesql)  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
ALTER TRIGGER [dbo].[WorkOrder_Upd_Trigger]
ON [dbo].[WorkOrderStates] 
AFTER UPDATE
AS 
    INSERT INTO ZZZ_TST (ORDERID, CATEGORYID)
      SELECT
            WORKORDERID,
            601
      FROM INSERTED
      WHERE CATEGORYID = 601
        AND OWNERID IS NOT NULL
END
15 мар 15, 14:03    [17385775]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти (Вызов триггера в exec sp_executesql)  [new]
Atomic
Member

Откуда: Москва
Сообщений: 16
felix_ff
ALTER TRIGGER [dbo].[WorkOrder_Upd_Trigger]
ON [dbo].[WorkOrderStates] 
AFTER UPDATE
AS 
    INSERT INTO ZZZ_TST (ORDERID, CATEGORYID)
      SELECT
            WORKORDERID,
            601
      FROM INSERTED
      WHERE CATEGORYID = 601
        AND OWNERID IS NOT NULL
END


Мир не без добрых "злословов" )))

Спасибо, немного конечно изменил, но смысл уже понял!
Мой код конечно говнокод, но честно потратил пару дней на поиск решения, прежде чем спросить
Чего ожидать от человека, который триггеры писал последний раз в 2006г. :)
16 мар 15, 11:10    [17388237]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти (Вызов триггера в exec sp_executesql)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Atomic
Чего ожидать от человека, который триггеры писал последний раз в 2006г

Ваш клиентский код тоже не фонтан.
Потому что вместо обработки серверной ошибки "просто подвисает при нажатии на ОК"
16 мар 15, 11:12    [17388243]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти (Вызов триггера в exec sp_executesql)  [new]
Atomic
Member

Откуда: Москва
Сообщений: 16
Atomic
felix_ff
ALTER TRIGGER [dbo].[WorkOrder_Upd_Trigger]
ON [dbo].[WorkOrderStates] 
AFTER UPDATE
AS 
    INSERT INTO ZZZ_TST (ORDERID, CATEGORYID)
      SELECT
            WORKORDERID,
            601
      FROM INSERTED
      WHERE CATEGORYID = 601
        AND OWNERID IS NOT NULL
END


Мир не без добрых "злословов" )))

Спасибо, немного конечно изменил, но смысл уже понял!
Мой код конечно говнокод, но честно потратил пару дней на поиск решения, прежде чем спросить
Чего ожидать от человека, который триггеры писал последний раз в 2006г. :)


ЗЫ. Вот честно не допер, почему "from inserted" а не "from updated" Ведь в трасе операция UPDATE
16 мар 15, 11:12    [17388244]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти (Вызов триггера в exec sp_executesql)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Atomic
Вот честно не допер, почему "from inserted" а не "from updated" Ведь в трасе операция UPDATE

Потому что так в хелпе написано
16 мар 15, 11:13    [17388250]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти (Вызов триггера в exec sp_executesql)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Atomic
Atomic
пропущено...


Мир не без добрых "злословов" )))

Спасибо, немного конечно изменил, но смысл уже понял!
Мой код конечно говнокод, но честно потратил пару дней на поиск решения, прежде чем спросить
Чего ожидать от человека, который триггеры писал последний раз в 2006г. :)


ЗЫ. Вот честно не допер, почему "from inserted" а не "from updated" Ведь в трасе операция UPDATE
Потому что в Microsoft не удосужились сделать updated.
Кстати, updated в 2006 году тоже отсутствовало.
16 мар 15, 12:08    [17388688]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить