Tworzenie triggerów

RE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Witam,
Muszę stworzyć trigger, który będzie odpowiadał za aktualizowanie karty członkowskiej w bazie danych. Polegać ma to na tym, że po dokonaniu wyznaczonej ilości rezerwacji w klubie przeskakuję się na wyższy poziom. Mógłby ktoś pomóc? Na razie mam tyle, ale coś nie działa.

Kopiuj
create trigger Aktualizacja_karty on Klient
after insert, update as 
declare @liczbaRez int
set @liczbaRez = count(data_rozpoczęcia)
select 
case 
when @liczbaRez >3 then Rodzaj_karty = 6,
when @liczbaRez >5 then Rodzaj_karty = 8
rollback
end
KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5550
1

A co nie działa?
I jaka baza?
BTW kod wklejaj w potrójne odwrócone apostrofy, a nie pojedyncze

RE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0
KamilAdam napisał(a):

A co nie działa?
I jaka baza?
BTW kod wklejaj w potrójne odwrócone apostrofy, a nie pojedyncze

Baza zajmująca się kortami tenisowymi w SQL Server .
Wyrzuca błędy o nieprawidłowym kodzie.

UglyMan
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2206
0

Po pierwsze to, co tu chcesz liczyć i skąd:

Kopiuj
set @liczbaRez = count(data_rozpoczęcia)
RE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0
Tomek Pycia napisał(a):

Po pierwsze to, co tu chcesz liczyć i skąd:

Kopiuj
set @liczbaRez = count(data_rozpoczęcia)

Tutaj miałoby liczyć liczbę dokonanych rezerwacji, przez danego klienta z tabeli zajmującej się rezerwacjami. Na podstawie tej wartości ma się aktualizować karta członkowska.

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
4

Na złej tabeli robisz trigger.
Nie powinienes na klientach, tylko rezerwacjach.

UglyMan
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2206
1
rezwol napisał(a):
Tomek Pycia napisał(a):

Po pierwsze to, co tu chcesz liczyć i skąd:

Kopiuj
set @liczbaRez = count(data_rozpoczęcia)

Tutaj miałoby liczyć liczbę dokonanych rezerwacji, przez danego klienta z tabeli zajmującej się rezerwacjami. Na podstawie tej wartości ma się aktualizować karta członkowska.

To raczej coś w style

Kopiuj
select @liczbaRez = count(data_rozpoczęcia) from tabela_z_rezerwacjami where id_clienta = inserted.id_clienta
RE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0
Tomek Pycia napisał(a):
rezwol napisał(a):
Tomek Pycia napisał(a):

Po pierwsze to, co tu chcesz liczyć i skąd:

Kopiuj
set @liczbaRez = count(data_rozpoczęcia)

Tutaj miałoby liczyć liczbę dokonanych rezerwacji, przez danego klienta z tabeli zajmującej się rezerwacjami. Na podstawie tej wartości ma się aktualizować karta członkowska.

To raczej coś w style

Kopiuj
select @liczbaRez = count(data_rozpoczęcia) from tabela_z_rezerwacjami where id_clienta = inserted.id_clienta

Po wprowadzeniu następujących zmian:

Kopiuj
create trigger Aktualizacja_karty on dbo.Klient
after insert, update as
declare @liczbaRez int
select @liczbaRez = count(data_rozpoczęcia)from rezerwacje where ID_klienta=inserted.Klient_ID,
case 
when @liczbaRez >3 then Rodzaj_karty = 6
when @liczbaRez >5 then Rodzaj_karty = 8
else rodzaj_karty = 5
rollback
end 

Nadal pokazuję mi się taki błąd : Msg 102, Level 15, State 1, Procedure Aktualizacja_karty, Line 4
Incorrect syntax near ','.

PD
  • Rejestracja: dni
  • Ostatnio: dni
0

tak jak napisał @Marcin.Miga nie na tej tabeli dodajesz trigger, powinien być na rezerwacjach:

Kopiuj
create trigger Aktualizacja_karty on rezerwacje
after insert, update as
begin
update k set rodzaj_karty=case when i.liczbaRez >5 then 8 when i.liczbaRez >3 then 6 else 5 end 
from klient k inner join (select id_klienta, count(id_klienta) liczbaRez  from inserted group by id_klienta) i 
on (k.id_klienta=i.id_klienta)
end 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.