MS SQL trigger nem fut le

MS SQL trigger nem fut le
2009-10-29T15:27:50+01:00
2009-10-30T10:02:49+01:00
2022-11-15T12:00:36+01:00
lwaters
Ismerkedem a triggerekkel és készítettem egy egyszerű triggert, ami listaár vagy felár módosításakor kiszámolja az egységárat és kitölti a tábla megfelelő mezőjét:

ALTER TRIGGER Megrendeles_reszletek_tr ON dbo.Megrendeles_reszletek --FOR INSERT, UPDATE, DELETE --beszúrás, módosítás, törlés előtt AFTER INSERT, UPDATE, DELETE --beszúrás, módosítás, törlés után AS BEGIN --PRINT 'Trigger eleje'; --RAISERROR('Trigger eleje',0,0) SET NOCOUNT ON; DECLARE @Count int; SET @Count = @@ROWCOUNT; IF @Count = 0 RETURN; DECLARE @egysar as REAL; DECLARE @listaar as REAL; DECLARE @felar as REAL; BEGIN TRY SELECT @listaar=(SELECT listaar FROM inserted); SELECT @felar=(SELECT felar FROM inserted); IF UPDATE(listaar) OR UPDATE(felar) BEGIN SELECT @egysar=@listaar+@felar; UPDATE Megrendeles_reszletek SET egysar=@egysar WHERE azon=(SELECT azon FROM inserted); END; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; EXECUTE dbo.uspLogError; END CATCH; END;

Megnyitottam a táblát, és módosítottam a listaár vagy felár mezőt, de sajnos nem történt semmi, úgy tűnik, a trigger nem akar lefutni. A trigger elejébe tettem egy print meg egy raiserror-t, hogy lássam, eljut-e idáig, de semmi. Próbáltam a FOR-t és AFTER-t is. Biztos valami banális kis hiba lehet, de sajnos nem látom. Access 2007-ből és SQL Server Management Express-en keresztül próbálkoztam a trigger írásával. Trigger debug-olási lehetőséget sajnos még nem találtam, meg elég primitív mindkét felület.
Mutasd a teljes hozzászólást!
Egyébként mintha a kígyó a farkába harapna..

alapértelmezett telepítés és beállítás esetén nem fut le a trigger az önmaga által kiváltott módosító lekérdezés hatására.
(kivéve azon bonyolult esetet, mikor egy másik táblát módosítasz és az ottani trigger módosít vissza)
Mutasd a teljes hozzászólást!

  • Minek ehhez trigger?
    egysar mező tulajdonságai közt: Computed Column Sopecification / Formula:
    listaar + felar

    Kész.
    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
  • Egyébként mintha a kígyó a farkába harapna..

    alapértelmezett telepítés és beállítás esetén nem fut le a trigger az önmaga által kiváltott módosító lekérdezés hatására.
    (kivéve azon bonyolult esetet, mikor egy másik táblát módosítasz és az ottani trigger módosít vissza)
    Mutasd a teljes hozzászólást!
  • alapértelmezett telepítés és beállítás esetén nem fut le a trigger az önmaga által kiváltott módosító lekérdezés hatására.

    Bocsi, igazad van, de miért nekem írod..

    (kivéve azon bonyolult esetet, mikor egy másik táblát módosítasz és az ottani trigger módosít vissza)

    Hasonló van a link-em példájában.

    Figure 1 1. A stored procedure, A, updates TableA. 2. This fires a trigger from TableA. 3. The defined trigger on TableA updates TableB. 4. TableB has a trigger which fires. 5. This trigger from TableB updates TableA.
    Mutasd a teljes hozzászólást!
  • Minek ehhez trigger?

    Ez most csak egy próbálkozás (vannak sokkal bonyolultabb megvalósítandó összefüggések is), persze, képletet is be lehet írni magába a tábla mező definícióba. Csak arra voltam kíváncsi, hogy meg lehet-e így triggerrel oldani egy egyszerű számítást.
    Mutasd a teljes hozzászólást!
  • nem fut le a trigger az önmaga által kiváltott módosító lekérdezés hatására

    Azt hiszem, ez a megoldás! Tehát akkor csak másik táblát tudok módosítani triggerrel.
    Mutasd a teljes hozzászólást!
  • Azt hiszem, ez a megoldás!

    Bocsi, de nem!
    Az a megoldás, hogy megismered a lehetőségeket, vagyis előbb legalább elolvasod a leírását(.NET Framework Class Library Trigger Class)!
    Az sem baj, ha még nem megy az angol, vannak jó könyvek magyar kiadásban is.
    Pl. Joe Celko: SQL felsőfokon.

    (a 140. oldalon olvashatsz róla, többek között ezt is: A triggerek előnye a hivatkozási épség eszközeivel szemben az, hogy mindent tudnak amit ezek az eszközök, és ezenfelül további szolgáltatásokat is nyújthatnak. Hátrányuk pedig az, hogy az optimalizáló nem kap vissza adatot az eljárás kódjától, így futásidejük nagy, és nem hordozhatók termékről termékre. Általában azt mondhatjuk, hogy ne használjunk triggereket ott, ahol a hivatkozási épség eszközeivel is célt érhetünk..)
    Mutasd a teljes hozzászólást!
  • megismered a lehetőségeket, vagyis előbb legalább elolvasod a leírását

    Igen, igazad van! Próbálok olvasgatni a triggerekről - főleg interneten szedem össze az infókat, kisebb mértékben könyvből. Az előző linkedet is végigolvastam, köszönöm szépen! Az a baj, hogy közben konkrét problémákat (is) meg kell oldanom, és minden gyorsan, rögtön kellene, hogy meglegyen, ezért nem sok idő marad az olvasgatásra. Mindent autodidakta módon tanulok (gyakran itt a prog.hu-n), az egyetemen sajnos nem volt módomban ilyen dolgokat megismerni (akkoriban még egész más volt a programozás). Köszönöm a segítséget!
    Mutasd a teljes hozzászólást!
  • Próbálok olvasgatni a triggerekről - főleg interneten szedem össze az infókat, kisebb mértékben könyvből.

    Hivatkzva előző (Joe Celko-s) idézetemre javaslom, hogy mielőtt egy trigger-es megoldáson törnéd a fejed, nézd meg van e alternatíva (szvsz a legtöbb esetben igen).
    Mindent autodidakta módon tanulok (gyakran itt a prog.hu-n)

    A prog.hu mellett érdemes még a Devportal valamint a Netacademia oldalait is látogatni (utóbbit főként SQL témákban).
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd