ТаблицаSQL Server 2012 Вставьте DATEDIFF в триггером колонки всякий раз, когда новая запись вставляется
CREATE TABLE CurrentApplication
(
StartDate datetime NOT NULL,
EndDate datetime NOT NULL,
NoOfDays integer,
StaffID integer NOT NULL,
AppStatus varchar(30) NOT NULL DEFAULT 'PENDING'
)
Trigger
CREATE TRIGGER InsertNoOfDays ON CurrentApplication
AFTER INSERT
AS
BEGIN
DECLARE @temp INT
SELECT @temp = DATEDIFF(day, EndDate, StartDate)
FROM inserted
INSERT INTO CurrentApplication(NoOfDays) VALUES (@temp)
--SELECT StaffID = inserted.StaffID
--FROM inserted
-- INSERT INTO CurrentApplication(NoOfDays)
-- SELECT Datediff(day, EndDate, StartDate)
-- FROM inserted;
END
Сообщение об ошибке:
Msg 515, Level 16, состояние 2, процедура InsertNoOfDays, строка 10
Невозможно вставить значение NULL в столбец «StartDate», таблица «StaffPortalDB.dbo.CurrentApplication»; столбец не допускает нулей. INSERT не работает. Заявление было прекращено.
То, что я пытаюсь сделать, это у меня есть таблица CurrentApplication
, и я хочу NoOfDays
столбец автоматически заполняется каждый раз, когда пользователь вставляет новую строку, с перепадом датой начала дня и конца дня.
У вашего триггера есть ** ОСНОВНАЯ ** ошибка в том, что вы, кажется, считаете, что она будет называться ** один раз в строке ** - это ** не ** случай. Триггер будет срабатывать ** один раз за оператор **, поэтому, если ваши инструкции 'INSERT' влияют на 25 строк, вы получите триггер, запущенный ** один раз **, но затем' Inserted' будет содержать 25 строк. Какой из этих 25 строк будет выбран ваш код? 'SELECT @temp = DATEDIFF (день, EndDate, StartDate) FROM вставлен' - он не детерминирован, он будет выбирать из одной произвольной строки и ** игнорировать ** все 24 других. Для этого нужно переписать триггер! –