如何将欧洲日期作为参数传递给存储过程

时间:2012-08-12 17:43:45

标签: sql-server date stored-procedures parameter-passing

使用SQL Server 2012和新的日期类型(不是dateTime),我创建了下一个过程:

CREATE PROC Test(@StartDate date ,@EndDate date)    
AS    
DECLARE @Temp TABLE([ID] int, [Date] date)    
INSERT INTO @Temp SELECT 1, CONVERT(date,'31/12/2012',103)    
INSERT INTO @Temp SELECT 2, CONVERT(date,'01/10/2012',103)    
INSERT INTO @Temp SELECT 3, CONVERT(date,'01/01/2012',103)    
SELECT * FROM @Temp WHERE [Date] BETWEEN @StartDate AND @EndDate

当我运行此存储过程时,我得到下一个错误,指示参数的日期格式:

Incorrect syntax near '/'. 

请问该怎么做?

1 个答案:

答案 0 :(得分:3)

首先,您的日期不应该包含/。但它也需要用引号括起来。尝试:

EXEC dbo.Test @StartDate = '20120101', @EndDate = '20120131';

如果你不使用引号,它需要用引号括起来的原因是你的“日期”被解释为数学表达式,例如:

01/01/2012 = 1 divided by 1 divided by 2012

您的约会日期中不应包含/的原因是因为m/d/yd/m/y是不安全的格式,可以根据语言和其他设置进行不同的解释。

最后,如果您从C#调用此过程,为什么要传递字符串而不是正确输入的参数?