0

使用 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

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

'/' 附近的语法不正确。 

请问应该怎么做?

4

1 回答 1

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# 调用此过程,为什么要传递字符串而不是正确键入的参数?

于 2012-08-12T17:46:50.510 回答