Hallo für Hobbyzwecke ich versuche, eine C# -Anwendung mit einer MS SQL Server-Datenbank, die ein Hotel-System wieder zusammensetzt erstellen. Ich versuche nun, einen SQL-Trigger zu erstellen, der eine Datumsdifferenz berechnet. Eine Reservierung darf nicht länger als 6 Wochen (42 Tage) sein. Allerdings löst mein Auslöser auch bei Reservierungen aus, die eine Abweichung von weniger als 42 Tagen haben, auch wenn die Differenz 1 Tag beträgt. also bin ich mir nicht sicher, was ich falsch mache.Trigger, der datediff
Meine Trigger:
create trigger trigger_reservation
on reservation
after update, insert
as
if exists
(
select reservationid, DATEDIFF(dd,Startdate,Enddate)
from reservation
group by reservationid, enddate, startdate
having DATEDIFF(dd,Startdate,Enddate) > 42
)
begin
raiserror('Error: Reservation may not be longer than 6 weeks',16, 1)
rollback transaction
end
Sicherlich überprüft Ihr Auslöser die GESAMTE Tabelle und nicht nur die Zeile, die Sie einfügen? Wenn Sie in der Datentabelle bereits eine Reservierung von mehr als 42 Tagen haben, wird der Trigger immer ausgelöst. –
Sie haben recht, es gibt in der Tat einige Reservierungen, die länger als 42 Tage sind (zufällig generierte Daten). Wie würde ich das beheben? – glnxhjeh
Grundsätzlich müssen Sie über die "speziellen" Tabellen wissen, auf die Sie in einem Trigger zugreifen können, der hier "eingefügt" werden soll. Ich sehe, dass Peterm seine Antwort aktualisiert hat, und das sollte genau so funktionieren, wie Sie es benötigen ... –