Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: TRIGGER FOR UPDATE
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
john_doe
Witajcie,

chciałbym napisać trigger który działa gdy zupdejtujemy jedno pole. Cała akcja rozgrywa się w jednej tabeli. Po prostu gdy updejtuje jedno pole ma zmienic sie inne na zadana przeze mnie wartosc.

Dokladniej:
tabela ma pola typ, id, seria i numer.
i tak gdy: update serii na 'WG' to numer ma sie zmienic na 113
gdy: update serii na 'TH' to numer ma sie zmienic na 100

seria jest polem typu <select> na stronie www

  1. SET QUOTED_IDENTIFIER ON GO
  2. SET ANSI_NULLS ON GO
  3.  
  4. ALTER TRIGGER CDN.KRY_trigerson ON tabela
  5. FOR UPDATE
  6. AS BEGIN SET NOCOUNT ON DECLARE @V_SERIA AS VARCHAR(5)
  7. DECLARE @V_TYP AS INT
  8. DECLARE @V_NR AS INT
  9.  
  10. SELECT @V_SERIA = INSERTED.TRN_TRNSERIA,
  11. @V_TYP = INSERTED.TRN_TRNTYP,
  12. @V_NR = INSERTED.TRN_TRNNUMER
  13. FROM INSERTED IF UPDATE ( TRN_TRNSERIA )
  14. BEGIN UPDATE CDN.TRANAG SET TRN_MAGzNUMER = 113
  15. WHERE TRN_GIDTYP = 2033 AND TRN_GIDNUMER = (SELECT TRN_GIDNUMER FROM INSERTED) END
  16.  
  17. SET NOCOUNT OFF
  18. END
  19.  
  20. GO
  21. SET QUOTED_IDENTIFIER OFF
  22. GO
  23. SET ANSI_NULLS ON GO


tak jak mam teraz to jaką kolwiek serie nie wybiore zamieni mi na 113, a ja chce aby np gdy seria WG to numerek jakis tam (taki jaki zadam), gdy seria TH to inny. ... i własnie tego nie wiem jak to przypisac

pozdro
Kicok
Zastosuj instrukcję CASE

Poniższy przykład powinien co nieco rozjaśnić. Wystarczy, że go sobie dostosujesz do swojego triggera:
  1. DECLARE @NUMER INT, @V_SERIA VARCHAR(5);
  2.  
  3. SET @V_SERIA = 'WG';
  4.  
  5.  
  6. SET @NUMER =
  7. CASE @V_SERIA
  8. WHEN 'WG' THEN 113
  9. WHEN 'TG' THEN 100
  10. ELSE 0
  11. END;
  12.  
  13. PRINT @NUMER;
john_doe
tylko właśnie nie wiem jak zapisać, że właśnie zupdejtowałem seria np na WG. Dopiero na podstawie updateu moge przypisac odpowiedni numer
Kicok
Cytat
że właśnie zupdejtowałem seria np na WG


Nie rozumiem.
W tabeli INSERTED tej informacji nie masz? A może chodzi ci o: "CREATE TRIGGER nazwa ON tabela AFTER UPDATE (...)"?
john_doe
wszystko juz działa zrobilem tak:

  1. SET QUOTED_IDENTIFIER ON GO
  2. SET ANSI_NULLS ON GO
  3.  
  4.  
  5.  
  6. ALTER TRIGGER CDN.KRY_TraNag_2_WM_TH ON CDN.TraNag
  7. after UPDATE
  8. AS BEGIN SET NOCOUNT ON DECLARE @V_SERIA AS VARCHAR(5)
  9. DECLARE @V_TYP AS INT
  10. DECLARE @V_NR AS INT
  11. DECLARE @NUMER AS int
  12.  
  13. SELECT @V_NR = trn_GIDnumer FROM INSERTED SELECT @V_TYP = trn_GIDtyp FROM INSERTED IF UPDATE ( TRN_TRNSERIA )
  14. BEGIN SELECT @V_SERIA = TRN_TRNSERIA FROM INSERTED WHERE TRN_GIDTYP = @V_TYP AND TRN_GIDNUMER = @V_NR
  15.  
  16. SET @NUMER =
  17. CASE @V_SERIA
  18. WHEN 'WG' THEN 113
  19. WHEN 'TH' THEN 117
  20. ELSE 0
  21. END;
  22. UPDATE CDN.TRANAG SET TRN_MAGZNUMER = @NUMER WHERE TRN_GIDTYP = @V_TYP AND TRN_GIDNUMER = @V_NR
  23. END
  24.  
  25. SET NOCOUNT OFF
  26. END
  27.  
  28.  
  29.  
  30. GO
  31. SET QUOTED_IDENTIFIER OFF
  32. GO
  33. SET ANSI_NULLS ON GO
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.