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/yd/m/y

そして最後に、C#からこのプロシージャを呼び出す場合、なぜ文字列を渡し、適切に型指定されたパラメータを渡さないのですか?

于 2012-08-12T17:46:50.510 に答える