Выполнить хранимую процедуру, если строка была вставлена в последнюю минуту

#sql-server #stored-procedures

#sql-сервер #хранимые процедуры

Вопрос:

У меня есть триггер, который запускает хранимую процедуру при вставке данных. Процедура работает нормально, но мне нужно установить условие — у меня есть столбец ACCESSEDTIME в формате ‘time’. Моя хранимая процедура должна выполняться, если ACCESSEDTIME она длится менее 1 минуты, а столбец «ТИП» равен «Исключению». Я не получаю сообщение об ошибке, но процедура не выполняется при использовании следующего кода перед НАЧАЛОМ.

 IF (SELECT COUNT(*) 
    FROM LOGS 
    WHERE Logs.TYPE = 'Exception' 
      AND CONVERT(datetime, ACCESSEDTIME) > DATEADD(minute, -1, GETDATE())) > 0
BEGIN
    -- my stored procedure
END
 

Комментарии:

1. почему это time не datetime так? CONVERT(datetime, ACCESSEDTIME) будет в 1900 году. гораздо проще просто сохранить дату и время последнего обращения и нет необходимости в специальной логике для обработки нового дня

2. @MartinSmith Я последовал вашему совету и изменил столбец time на datetime, и теперь процедура работает нормально без необходимости преобразования столбца time. Спасибо.

Ответ №1:

Решение состоит в преобразовании столбца ACCESSEDTIME в таблице в формат datetime вместо формата time. Тогда нет необходимости выполнять преобразование в процедуре для столбца — ‘ACCESSEDTIME’, как в этом примере.

 IF (SELECT COUNT(*) 
    FROM LOGS 
    WHERE Logs.TYPE = 'Exception' 
    AND ACCESSEDTIME > DATEADD(minute, -1, GETDATE())) > 0
BEGIN
    -- my stored procedure
END