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);