2014-09-29 3 views
1

Я пишу 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()) 
+0

возможно дубликат [SQL Server: DateDiff функция привела в переполнении] (http://stackoverflow.com/questions/1275208/sql-server-datediff-function-resulted-in-an-overflow) – LittleBobbyTables

+0

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

+0

Вы смотрели на этот ответ в дубликате? http://stackoverflow.com/a/23638804/334849 – LittleBobbyTables

ответ

1

Попробуйте изменить SQL к этому:

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()) 
+0

Вы смогли воспроизвести его ошибку? –

+1

@Paul Да, при запуске: выберите DATEDIFF (второй, '1945-01-01', GETDATE()) – johnyTee

+0

Спасибо, но это не разница. Еще один способ написать заявление. Проблема заключается в том, что запрос проходит через ВСЕ строки, что вызывает переполнение. Ответ находится в комментариях к первому сообщению. – Sney

Смежные вопросы