1

私は SQL Server の初心者です。解けない問題で困っています。ストアドプロシージャを書きたい。

TimeStamp列のデータ型はdatetime.

これは私のストアドプロシージャです:

    @fetchtype int,
    @startdate nvarchar(22),
    @finishdate nvarchar(22)
AS
    if (@fetchtype = 0)
    BEGIN
        PRINT('Select TimeStamp ' From WindData Where TimeStamp between '+@startdate+' and '+@finishdate)
        EXEC('Select TimeStamp ' From WindData Where TimeStamp between '+@startdate+' and '+@finishdate) 
    END

また、私の実行クエリは

DECLARE @return_value int

EXEC    @return_value = [dbo].[Get_Values]
    @columnnames = N'V81_Avg',
    @fetchtype = 0,
    @startdate = N'2013-04-23 12:58:40.000',
    @finishdate = N'2013-04-23 12:59:00.000'

SELECT  'Return Value' = @return_value

しかし、クエリを実行すると、このエラーが発生します

メッセージ 102、レベル 15、状態 1、行 1
'12' 付近の構文が正しくありません。

日時形式を正しく書いていなかったと思います。

4

3 に答える 3

2

ここでの問題は、SQL クエリ文字列にあります。

そのはず:

PRINT('Select TimeStamp From WindData Where TimeStamp between '''+@startdate+''' and '''+@finishdate+'''');
EXEC('Select TimeStamp From WindData Where TimeStamp between '''+@startdate+''' and '''+@finishdate+'''') 

しかし、最善の方法は、これらのパラメーターを DATETIME として使用し、動的クエリを避けEXEC()て SELECT のみに置き換えることです。

@startdate datetime,
@finishdate datetime

...
Select TimeStamp From WindData Where TimeStamp between @startdate and @finishdate;
...
于 2013-08-22T11:47:31.183 に答える
1

日付を引用符で囲む必要があります。

declare @sql nvarchar(max) = 'Select TimeStamp From WindData Where TimeStamp between '''+@startdate+''' and '''+@finishdate+'''')
EXEC(@sql);

または、さらに良いことに、次を使用しますsp_executesql

declare @sql nvarchar(max) = 'Select TimeStamp From WindData Where TimeStamp between @startdate and @finishdate')
exec sp_executesql @sql, N'@startdate date, @finishdate date', @startdate = @startdate, @finishdate = @finishdate;
于 2013-08-22T11:50:00.577 に答える