【发布时间】:2012-04-19 16:19:30
【问题描述】:
我有一个存储过程,它接受一个作为字符串传入的日期时间参数。比如这样:
程序:
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 上运行的。
谢谢!
【问题讨论】:
-
看来玛雅人的预测有点晚了
-
您的服务器使用什么排序规则? msdn.microsoft.com/en-us/library/ms143508(v=sql.105).aspx
-
@ChrisShain 服务器排序规则和数据库排序规则是 SQL_Latin1_General_CP1_CI_AS。
标签: sql-server stored-procedures sql-server-2008-r2 sqlexception outofrangeexception