TRIGGER AFTER INSERT oraz INSERT INTO

0

Próbuję utworzyć Trigger który uruchomi się po zaistnieniu w tabeli konkretnej sprzedaży. Trigger ma za zadanie skopiowanie numeru id(ID_DOK_MAGAZYNOWEGO) tejże sprzedaży oraz id produktów które brały udział w sprzedaży. - na chwilę obecną tylko tyle, dla mnie aż tyle :). Numer id sprzedaży i numer id produktu mają zostać przeniesione do bazy z historią sprzedaży.

Poniższy kod działa. Uruchamia się sam każdorazowo po utworzeniu nowej sprzedaży i kopiuje id sprzedaży (ID_DOK_MAGAZYNOWEGO) do bazy z historią sprzedaży.

ALTER trigger [dbo].[ID_INSERT]
on [dbo].[DOKUMENT_MAGAZYNOWY]
after insert

as

    if exists
    (
        select * from inserted i
        where i.ID_TYPU = 1 -- konkretny typ sprzedaży, tylko ten jeden rodzaj
    )
    begin
        INSERT INTO id.dbo.historia(id_numer)

        select ID_DOK_MAGAZYNOWEGO from inserted


    end

Problem pojawia się gdy chcę dodać kolejną tabele ,żeby moja baza z historią zawierała więcej danych. Mianowicie chcę dodać tabelę który pokaże mi jakie produkty brały udział w sprzedaży. - tych danych nie ma w tabeli na której został założony trigger.

gdy modyfikuję trigger w poniższy sposób , przestaje on działać, nie dodają się nowe wiersze do mojej tabeli z historią sprzedaży tak jak to miało miejsce w pierwszym przypadku.

W tym przypadku nie działa .

ALTER trigger [dbo].[ID_INSERT]
on [dbo].[DOKUMENT_MAGAZYNOWY]
after insert

as

    if exists
    (
        select * from inserted i
        where i.ID_TYPU = 1 -- konkretny typ sprzedaży, tylko ten jeden rodzaj
    )
    begin
        INSERT INTO id.dbo.historia(id_numer,id_artykulu)

        select 
        inserted.ID_DOK_MAGAZYNOWEGO, -- numer sprzedaży
        POZYCJA_DOKUMENTU_MAGAZYNOWEGO.ID_ARTYKULU -- id artykulu który się sprzedał
        
        from inserted
        inner join  POZYCJA_DOKUMENTU_MAGAZYNOWEGO on 
        POZYCJA_DOKUMENTU_MAGAZYNOWEGO.ID_DOK_MAGAZYNOWEGO=inserted.ID_DOK_MAGAZYNOWEGO 


    end
2

i nie zadziała, ponieważ pozycje są dodawane do dokumentu po dodaniu nagłówka.
Musisz założyć trigger na tabeli POZYCJA_DOKUMENTU_MAGAZYNOWEGO i w ciele trigger-a musisz dodać JOIN do tabeli DOKUMENT_MAGAZYNOWY aby pobrać tylko dokumenty określonego typu.
I musisz mieć na uwadze, że trigger tylko na zdarzeniu INSERT nie uwzględni zmian ilości pozycji na dokumencie.

0
Paweł Dmitruk napisał(a):

i nie zadziała, ponieważ pozycje są dodawane do dokumentu po dodaniu nagłówka.
Musisz założyć trigger na tabeli POZYCJA_DOKUMENTU_MAGAZYNOWEGO i w ciele trigger-a musisz dodać JOIN do tabeli DOKUMENT_MAGAZYNOWY aby pobrać tylko dokumenty określonego typu.
I musisz mieć na uwadze, że trigger tylko na zdarzeniu INSERT nie uwzględni zmian ilości pozycji na dokumencie.

Tak masz racje , napisałem to trochę nie logicznie. Już poprawione i działa tak jak sobie założyłem ! Super dzięki za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1