Я пишу StoredProcedure, где мне нужно знать, есть ли в таблице данные, которые были обновлены за последние 10 секунд. Моя идея была:Функция DATEADD, вызывающая переполнение
SELECT @CNT = ba_sales_funnel_id FROM CRM7.BA_SALES_FUNNEL WHERE project_id = @project_id
and sale_id = @sale_id
and DATEDIFF(SECOND, updated, GETDATE()) < 10
я получаю код ошибки здесь:
Функция DateDiff привело к переполнению. Количество дат, разделяющих два экземпляра даты/времени, слишком велико. Попробуйте использовать датифф с менее точной датой.
Надеюсь, вы можете мне помочь.
=======================================
Решение:
SELECT @CNT = ba_sales_funnel_id FROM CRM7.BA_SALES_FUNNEL WHERE project_id = @project_id
and sale_id = @sale_id
and DATEDIFF(YEAR, updated, GETDATE()) < 1
and DATEDIFF(MONTH, updated, GETDATE()) < 1
and DATEDIFF(DAY, updated, GETDATE()) < 1
and DATEDIFF(SECOND, updated, GETDATE()) < 10
ИЛИ
SELECT @CNT = ba_sales_funnel_id FROM CRM7.BA_SALES_FUNNEL WHERE project_id = @project_id
and sale_id = @sale_id
and updated >= DATEADD(second,-10,GETDATE())
возможно дубликат [SQL Server: DateDiff функция привела в переполнении] (http://stackoverflow.com/questions/1275208/sql-server-datediff-function-resulted-in-an-overflow) – LittleBobbyTables
Ty для вашей помощи. Проблема заключается в том, что запрос обрабатывает все строки таблицы и проверяет только секунды. Решение было следующим: \t \t \t SELECT @CNT = ba_sales_funnel_id FROM CRM7.BA_SALES_FUNNEL ГДЕ project_id = project_id \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t и sale_id = sale_id \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t и DATEDIFF (год, обновлены, GETDATE()) <1 \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t и DATEDIFF (месяц, обновление, GETDATE()) <1 \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t и DATEDIFF (DAY, обновлены, GETDATE()) <1 \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t и DATEDIFF (ВТОРОЙ, обновленный, GETDATE()) <10 – Sney
Вы смотрели на этот ответ в дубликате? http://stackoverflow.com/a/23638804/334849 – LittleBobbyTables