我有一个存储过程,它接受一个作为字符串传入的日期时间参数。比如这样:
程序:
CREATE PROCEDURE [dbo].[MyFancySP]
@MyStartDate datetime = NULL,
@MyEndDate datetime = NULL
AS
....
称呼:
EXEC [dbo].[MyFancySP]
@MyStartDate = N'01/01/2012',
@MyEndDate = N'03/01/2012'
存储过程一直这样工作。现在,这是有趣的部分。一旦我将日期更改为 2012 年 3 月 27 日或过去,我就会收到以下错误:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
存储过程中唯一使用日期的地方是 where 子句。如果它与它有关,我也会在这里复制它:
WHERE
((@MyStartDate IS NOT NULL AND @MyEndDate IS NOT NULL
AND d.SomeDate >= @MyStartDate AND d.SomeDate <= @MyEndDate)
OR @MyStartDate IS NULL AND @MyEndDate IS NULL)
任何想法为什么我会在 3 月 27 日或之后得到超出范围的异常?顺便说一下,这是在 SQL Server 2008 R2 上运行的。
谢谢!