Autor Wątek: trigger  (Przeczytany 2173 razy)

0 użytkowników i 2 Gości przegląda ten wątek.

Offline nsline

  • Nowy użytkownik
  • *
  • Wiadomości: 1
  • Reputacja +0/-0
  • Wersja programu: 1.49
trigger
« dnia: Listopad 10, 2017, 11:27:54 »
witam
zrobiłem trigger zmieniający kategorię dokumentu ZK jeżeli udzielono rabatu (aby szef musiał zaakceptować takie zamówienie). W zakresie ZK działa tak jak powinien, natomiast powoduje blokadę poprawiania FS zbiorczych z więcej niż jednej WZ (FS zbiorcza z 1 WZ działa prawidłowo):

CREATE TRIGGER [dbo].[rd_ZK_tr_dokDokument_Inserting]
   ON  [dbo].[dok__Dokument] AFTER Update
AS
BEGIN
DECLARE @rabat money, @ident int
SET @ident = (SELECT dok_Id FROM INSERTED)
SET @rabat = (SELECT max( pozHan.ob_Rabat) FROM dok_Pozycja AS pozHan WHERE pozHan.ob_DokHanId=@ident )
   
   SET NOCOUNT ON;
   UPDATE dbo.dok__Dokument
   SET dok__Dokument.dok_KatId = case WHEN ( @rabat )  > 0 then '2' else ( dok__Dokument.dok_KatId ) end
   WHERE dok__Dokument.dok_id = @ident AND dok__Dokument.dok_Typ=16 AND dok__Dokument.dok_KatId = 1 AND dok__Dokument.dok_Status in (5,6,7) ;
END

Problem powstaje prawdopodobnie gdy SET @ident = (SELECT dok_Id FROM INSERTED) zwróci więcej niż jeden wynik.
Proszę o pomoc w poprawnym napisaniu tego triggera.

Robert

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9214
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: trigger
« Odpowiedź #1 dnia: Listopad 10, 2017, 13:20:40 »
Sprawdź czy w inserted jest więcej niż 1 rekord i  jeżeli tak to napisz kursor, który zrobi operację na każdym z rekordów.
Sławek, Zduńska Wola

Forum Użytkownikow Subiekt GT

Odp: trigger
« Odpowiedź #1 dnia: Listopad 10, 2017, 13:20:40 »