Sql 触发以防止在周日插入约会,但在这两种情况下,插入都已完成
我认为错误在Sql 触发以防止在周日插入约会,但在这两种情况下,插入都已完成,sql,sql-server,Sql,Sql Server,我认为错误在@dayName中-它的值可能为null。 如果不是星期天,我想将这一行添加到表中 CREATE TRIGGER no_appointments ON Appointments INSTEAD OF INSERT AS BEGIN DECLARE @dayName VARCHAR(9); SELECT @dayName = AppDate FROM inserted; IF (DATENAME(DW, @dayName) = 'Sunday
@dayName
中-它的值可能为null。
如果不是星期天,我想将这一行添加到表中
CREATE TRIGGER no_appointments
ON Appointments
INSTEAD OF INSERT
AS
BEGIN
DECLARE @dayName VARCHAR(9);
SELECT @dayName = AppDate
FROM inserted;
IF (DATENAME(DW, @dayName) = 'Sunday')
BEGIN
RAISERROR ('No appointments on Sunday are inserted!', 10, 1);
END;
ELSE
BEGIN
INSERT INTO Appointments
SELECT *
FROM inserted;
END;
END;
不需要触发器。使用检查约束:
alter table appointments
add constraint chk_appointment_date check (datename(weekday, appdate) <> 'Sunday');
“我想将此行添加到表中”。这意味着您不能完全理解SQL Server中的触发器,因为可以同时为多行调用触发器。这是SQL Server触发器的一个非常重要的特性。
alter table appointments
add constraint chk_appointment_date check ( (datepart(weekday, appdate) - 1 + @@DATEFIRST) % 7 = 0);