Tworzenie triggerów

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.

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
1

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

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.

0

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

set @liczbaRez = count(data_rozpoczęcia)
0
Tomek Pycia napisał(a):

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

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.

4

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

1
rezwol napisał(a):
Tomek Pycia napisał(a):

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

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

select @liczbaRez = count(data_rozpoczęcia) from tabela_z_rezerwacjami where id_clienta = inserted.id_clienta
0
Tomek Pycia napisał(a):
rezwol napisał(a):
Tomek Pycia napisał(a):

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

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

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

Po wprowadzeniu następujących zmian:

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 ','.

0

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

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 

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