MSDN
では、次のように明確に述べられています。
Date引数は、そのデータ型の範囲外の値にインクリメントすることはできません。次のステートメントでは、日付値に追加される数値が日付データ型の範囲を超えています。次のエラーメッセージが返されます:「 'datetime'列に値を追加するとオーバーフローが発生しました。」
そして例:
SELECT DATEADD(year,2147483647, '2006-07-31');
SELECT DATEADD(year,-2147483647, '2006-07-31');
エラーの原因:
「 'datetime'列に値を追加するとオーバーフローが発生しました。」
これは正しいようです。しかし、なぜこのSQLステートメントの実行で同じエラーが発生するのですか?
SELECT DATEDIFF(YY,'1013-12-12',DATEADD(YY,-300,getdate()))
より具体的かつ唯一:
SELECT DATEADD(YY,-300,getdate())
'sql datetime range'の最初のグーグル結果 。 1753年1月1日。それがあなたの下限です。
追加された質問へのコメント この雑学クイズ この下限の起源について。
フィールドを使用してDateTime変換を行う場合は、変換でcaseステートメントを使用して、フィールドが1より大きいかどうかを確認しますOR 1000000)、この問題は発生しなくなります。