#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