Я перекрестно применил табличную функцию в операторе DML, который возвращает два столбца, один из которых — RiskValue (который представляет собой целое число, обозначающее период сканирования). Теперь, когда я печатаю значение RiskValue вместе с функцией dateadd, подобной этой (y — это псевдоним функции, а am это другая таблица)
select cast(y.RiskValue as int),dateadd(m,cast(y.RiskValue as int),@RunningDate)
from .....
это дает мне правильные значения, как
6 | 'Some Date'
но когда я использую его в предложении where как
where am.DateOpen >= dateadd(m,cast(y.RiskValue as int),@RunningDate)
Я получаю сообщение об ошибке:
Добавление значения в столбец datetime вызвало переполнение
Обратите внимание, что передача жестко закодированных значений как
where am.DateOpen >= dateadd(m,6,@RunningDate)
работает отлично. (очевидно будет)
Любые предложения, что может быть не так?
@RunningDate
иRiskValue
? Типdate
переполняется после добавления чего-то, что выталкивает его за пределы максимального9999-12-31
, поэтому ваше значение риска должно быть более 95000 или около того, если дата запуска приходится на 2015 год. Может ли это быть? Кроме того, какой тип имеет RunningValue? - person jpw   schedule 16.05.2015DATEADD(MONTH, CASE WHEN y.RiskValue < 20000 THEN y.RiskValue END, @RunningDate)
. - person Aaron Bertrand   schedule 16.05.2015