使用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 '/'.
请问该怎么做?
答案 0 :(得分:3)
首先,您的日期不应该包含/
。但它也需要用引号括起来。尝试:
EXEC dbo.Test @StartDate = '20120101', @EndDate = '20120131';
如果你不使用引号,它需要用引号括起来的原因是你的“日期”被解释为数学表达式,例如:
01/01/2012 = 1 divided by 1 divided by 2012
您的约会日期中不应包含/
的原因是因为m/d/y
和d/m/y
是不安全的格式,可以根据语言和其他设置进行不同的解释。
最后,如果您从C#调用此过程,为什么要传递字符串而不是正确输入的参数?