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

Откуда:
Сообщений: 1087
create TRIGGER dbo.Consume ON dbo.proc_packs AFTER UPDATE AS
  SET NOCOUNT ON
  UPDATE proc_packs
  SET
    cday = (SELECT po
            FROM
              proc_prunits pp
            WHERE
              pp.prunit = 52)
  FROM
    proc_packs ppp
    JOIN deleted d
      ON ppp.id = d.id
  WHERE
    ppp.rtype = 12
GO

или
CREATE TRIGGER dbo.Consume ON dbo.proc_packs AFTER UPDATE AS
  SET NOCOUNT ON
    IF EXISTS (SELECT 1 FROM inserted i WHERE i.rtype=12)
      BEGIN

  UPDATE proc_packs
  SET
    cday = (SELECT po
            FROM
              proc_prunits pp
            WHERE
              pp.prunit = 52)
  FROM
    proc_packs ppp
    JOIN deleted d
      ON ppp.id = d.id
  END

GO
12 янв 13, 13:12    [13759053]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
waszkiewicz,
а они делают одно и тоже? мне показалось что- нет
12 янв 13, 14:23    [13759231]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1087
А в где нет-то?
12 янв 13, 15:20    [13759458]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
qwerty112
Guest
waszkiewicz
А в где нет-то?

в там - в триггере
12 янв 13, 15:24    [13759470]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1087
Что в триггере ясно. Что не так?
12 янв 13, 15:30    [13759489]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
qwerty112
Guest
waszkiewicz
Что в триггере ясно. Что не так?

если будет обновлятся >1 записи, триггера будут работать по разному
12 янв 13, 15:33    [13759499]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
waszkiewicz,
я не говорю, не то. просто они работают по разному, мне кажется. а может и ошибаюсь.
12 янв 13, 15:38    [13759511]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
waszkiewicz,
а вы проверьте и скажите нам, если это возможно
12 янв 13, 15:39    [13759516]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1087
А, ну да, если обновится пачка записей, где не у всех rtype=12 (но хотя бы одно есть) - будет косяк. Запись одна обновляется.
Проблема в том, что логика реализована на чужом клиенте, функционал перестал устраивать - посему и триггеры.
Запись с одним id обновляется несколько раз - поэтому и необходима проверка rtype. Весь вопрос - что быстрее отработает первый или второй вариант?
12 янв 13, 15:40    [13759521]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
waszkiewicz
А, ну да, если обновится пачка записей, где не у всех rtype=12 (но хотя бы одно есть) - будет косяк. Запись одна обновляется.
Проблема в том, что логика реализована на чужом клиенте, функционал перестал устраивать - посему и триггеры.
Запись с одним id обновляется несколько раз - поэтому и необходима проверка rtype. Весь вопрос - что быстрее отработает первый или второй вариант?
а вас устраивает 1-й вариант?
12 янв 13, 15:43    [13759524]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1087
Оба варианта рабочие. Но проверялись на тестовой базе. В продуктивной обращение к таблице proc_packs весьма интенсивное (в том числе и update).
12 янв 13, 15:47    [13759533]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
waszkiewicz
Оба варианта рабочие. Но проверялись на тестовой базе. В продуктивной обращение к таблице proc_packs весьма интенсивное (в том числе и update).
если по логике вам подойдет 2-й вариант(хотя я очень сомневаюсь) то этот вариант быстрее чем 1-й. и к тому же вы можете посмотреть план выполнение запроса, если что.
12 янв 13, 15:52    [13759544]     Ответить | Цитировать Сообщить модератору
 Re: Какой вариант триггера выбрать?  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
waszkiewicz,

если вопрос только в том нужна ли проверка на наличие перед выполнением обновления - абсолютно не нужна. В апдейте ставите эту проверку и корректно и также быстро все отработает (ну не медленнее) - 1й вариант.
2й вариант могут быть лишние операции - таже проверка на 12 лишняя. И плюсом во 2м триггере если одна такая запись есть - то без проверки обновятся все записи - эту проверку для логики так же нужно ставить в where как и в 1м варианте.
12 янв 13, 22:18    [13760710]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить