我有一个存储过程导致日期转换错误。我不知道发生了什么变化,因为它已经好几个月了,但是我们的开发小组是国家DW的下游。有两个变量用于检索日期范围@DatePlus1
& @DayOffset
。
@DatePlus1
被用于十几个我不会发帖的CTE,除非被要求但是我注释了日期计算并且难以将日期设置为'2017-10-31 00:00:00'然后运行程序。它运行没有错误,但我不明白为什么。
原始代码将@DatePlus1
设置为Date
类型,在主题中生成相同的错误。
SELECT @DayOffset = ISNULL(@DayOffset, 0)
DECLARE @DatePlus1 DATETIME2(0) --Was date but changed to datetime2 while troubleshooting
SELECT
@DatePlus1 = CONVERT(DATE, DATEADD(dd, 1, DATEADD(dd, @DayOffset, GETDATE())))
答案 0 :(得分:0)
静态值的解释不会与变量中传递的相同值有任何不同。因此问题不是你想象的那样。
您正在使用范围为smalldatetime
数据类型的静态变量进行测试。你的测试成功了。
因此,当您使用变量时测试失败的原因是因为变量的值超出了smalldatetime
的范围,或者导致某些选择的值超出范围
问题不在于您使用的是变量。问题是您在代码的某些部分中为该变量赋予了无效值,而这些代码未在您的问题中显示。
要解决此问题,您需要找到代码中填充smalldatetime
变量或列的所有位置,并使用PRINT
或SELECT
语句查看您的值试图插入smalldatetime
。
到目前为止,我已经完成了2次,它在1个RequestDate比较中失败但在另一个上没有,但RequestDate出现在不同的表中。
另外要寻找的是代码中的位置,其中变量的值可以通过编程方式进行更改。我会在比较工作的两个查询和失败的查询之间看起来正确。