Triggerel több sor beillesztése egy napló táblába

Triggerel több sor beillesztése egy napló táblába
2017-01-26T14:26:34+01:00
2017-01-26T21:47:29+01:00
2022-12-04T08:15:41+01:00
broo
Sziasztok!

Hogyan lehet egy triggerrel több sort úgy beilleszteni, hogy a sorok egy része ugyan az, a többi pedig változik.

Példa, hogy érthető legyen:

Triggerrel akarok csinálni egy napló táblát ahol egy termék árát nyilvántartom a törlés után.
A trigger a törlésre reagál, a napló táblába beilleszt egy új sort a termék kódjával és nevével és az árával + hogy meddig volt az az ár).
Hogyan lehet megoldani, hogy a valaha lévő összes árat beillessze egyszerre, külön-külön sorba?
Mutasd a teljes hozzászólást!

  • Így sem túl érhető, hogy mit akarsz... 

    Több rekordot is ugyan úgy insertálsz, mintha egyet insertálnál.
    "beilleszt egy új sort a termék kódjával és nevével és az árával" - A nevét minek insertálnád, elég az azonosítója.



    Ha leírod a táblaszerkezeted, akkor biztos jobban megfogják érteni az emberek a problémádat.

    Látatlanba, 

    termék tábla: id, terméknév stb.

    árak tábla: id, termék id, érvényesség idő

    termék törlésnél nem törlöd csak inaktiválod egy flaggel, vagy külön törölt termékek táblába rakod.

    napló tábla, id, kívánt mezők, törléskör bővíted...
    Mutasd a teljes hozzászólást!
  • Igen kb. így néz ki a tábla. A napló táblába szeretném rakni azokat a termékeket amiket törlök. 
    Akkor fut le a trigger amikor a termékből törlök egy sort. Ekkor azt szeretném, hogy a naplóba jelenjen meg az összes ára pl. így: (akkor a nevét kiveszem az nem kell)

    termék id     ár     meddig
    1                99         2016.10.21
    1               129        2016.10.23
    1               149        2016.10.27

    Azt szeretném, hogy így rakja be, de azt nem tudom, hogy hogyan kell, hogy az összes árat betegye egymás alá a hozzá tartozó dátummal, mindig csak egy sort sikerül beilleszteni, a legutolsót.
    Mutasd a teljes hozzászólást!
  • Kiveszed a törlendő ID-t a deleted virtuális táblából, ami a trigger futásának ideje alatt létezik.

    declare @id int = select id from deleted
    Aztán átmásolod a korábbi árakat a logba:

    insert into Log select termekid, ar, mettol from Tetelek where termekid = @id
    Mutasd a teljes hozzászólást!
  • Köszi, ez így működik.
    Viszont lenne mégegy kérdésem: ha van egy másik deklarációm, pl. @összes_eladás, akkor hogyan tudom az INSERT INTO-val együtt az egészet betenni, úgy hogy 

    termék id, összes eladás, ár, meddig
    1, 158, 99, 2016.10.21
    1, 558, 129, 2016.10.23
    1, 43, 149, 2016.10.27
    Mutasd a teljes hozzászólást!
  • Beleteszed a select-be. A select-be nem csak oszlopneveket adhatsz meg, hanem konstanst, változót, függvényt stb.
    Mutasd a teljes hozzászólást!
  • Rendben, köszi a segítséget! Próbálkozok. :)
    Mutasd a teljes hozzászólást!
  • Mi a cél?

    1. Legyen egy tábla, amiben csak élő termék & élő ár van + egy "napló" tábla (amiben minden egyéb)
    VAGY
    2. Legyen egy tábla, amiben élő termékek összes ára van + egy "napló" tábla, amiben csak törölt termékek (összes árral)

    Illetve a törlés termék & ár kombóra vagy termékre megy, esetleg mindkettő lehetséges...

    Mert más-más trigger kell 1. ill. 2. esetben.
    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