Wpis z mikrobloga

Czyść,
Tworzę bazę danych, tematyka piłkarska (jak widzę nie tylko ja) i tworzyłem taką prymitywną tabelę ligową, ale napotkałem na problem. Otóż mam tabelę MECZE, w której wprowadzam Gospodarza (odpowiada id klubu), Goscia (również jako id klubu), gole gospodarza, gole gościa i data (data taka ręcznie wprowadzana w sumie do niczego konkretnego się nie przydaje).
Pomijając to, że pewnie idzie rozwiązać dużo prościej, to co tu poniżej zamieściłem działa, aczkolwiek ma jedną wadę
http://prntscr.com/ax3lhc

Problem ten polega na tym, że (podam w punktach i mam nadzieję, że ktoś mnie zrozumie):
1. Dodaje nowy mecz do tabeli mecze pierwszy raz.
2. Wszystkie rzeczy z powyższego wyzwalacza dodają się prawidłowo.
3. Dodaję nowy mecz.
4. Następuje kolejne działanie wyzwalacza w którym pojawia się problem. Dodał on wartości nowego meczu, ale również tego starego. W ten sposób mam 2 wiersze w tabeli mecze, a do tabeli ligowej (dokładniej tabeli KLUBY, która ma odpowiednie kolumny) dodało mi wartości 3 meczów.
5. Powtarzając powyższe etapy błąd nawarstwia się.

Myślałem, żeby jakoś się odnieść do id meczu, który właśnie wprowadzamy, ale nie potrafię tego zrobić.
Można pewnie użyć tej daty, ale też sobie z tym nie radzę.

Jak ktoś z was się zna i byłby w stanie mi pomóc to będę wdzięczny.

#studbaza #sqlserver #sql
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Marynowany:
1. przy odpalaniu triggera rdbms tworzy tabelę inserted/updated/deleted - odpowiednio do operacji jaka była wykonana. W niej masz rekordy których tyczy się operacja - wykorzystaj ją.
2. w pojedynczej operacji update możesz zaktualizować wartości kilku kolumn (kolumna = wartość, [kolumna = wartość])
  • Odpowiedz
@Marynowany: @@identity zwraca Ci Id ostatniego dodanego w tej sesji rekordu, więc zalecałbym Ci jednak skorzystać z tabel o których pisałem. W przypadku gdy miałbyś wrzucać dane o meczach masowo, to trigger odpali Ci się tylko dla ostatniego insertu i rozwali spójność danych.
  • Odpowiedz