Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> TRIGGER FOR UPDATE
john_doe
post
Post #1





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował john_doe 21.08.2007, 17:16:17
Go to the top of the page
+Quote Post
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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;
Go to the top of the page
+Quote Post
john_doe
post
Post #3





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Kicok
post
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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 (...)"?

Ten post edytował Kicok 25.08.2007, 08:26:37
Go to the top of the page
+Quote Post
john_doe
post
Post #5





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


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


Ten post edytował john_doe 23.08.2007, 12:48:05
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 18:05