1

SQLストアドプロシージャに次のような行があります(意図したとおりに機能します)。

HAVING  oh.startdate BETWEEN @startDate AND @endDate

しかし、さらに下に私は次の行を持っています:

AND (oh.user IN (@userIDs))

@userIDsはIDのコンマ区切り文字列であり、oh.userはINTEGERであるため、SQLクエリ全体を動的文字列(@sql)に入れ、すべてのパラメータを連結してから使用する必要があります。

sp_executesql @sql 

日付の間を除いてすべてが正常に機能しています。いくつかの方法を試しましたが、エラーが発生し続けるか、次のような場合に結果が返されません。

    HAVING  oh.startdate BETWEEN CONVERT(DATETIME, '+LEFT(CONVERT(VARCHAR, @startDate, 120), 10)+', 120) AND CONVERT(DATETIME, '+LEFT(CONVERT(VARCHAR, @endDate, 120), 10)+', 120)

何も返しません。

    HAVING  oh.startdate '+LEFT(CONVERT(VARCHAR, @startDate, 120), 10)+' AND '+LEFT(CONVERT(VARCHAR, @endDate, 120), 10)+'

また、何も返しません。

    HAVING  oh.startdate BETWEEN ' + @startDate +' AND '+ @endDate +'

DATETIMEを文字列に変換するときにエラーを返します。

どんな助けでも大歓迎です。

ありがとう、トーマス

4

2 に答える 2

3

必要なパラメータを使用sp_executesqlして渡すことができます。

SET @sql = 'SELECT blabla FROM Table WHERE Something HAVING oh.startdate BETWEEN @startDate AND @endDate'
EXEC sp_executesql @sql,N'@startDate DATE, @EndDate DATE',@startDate, @EndDate
于 2012-03-27T19:17:02.223 に答える
0

これを試して:

HAVING  oh.startdate BETWEEN to_date(@startDate,'dd-MM-yyyy') AND to_date(@endDate,'dd-MM-yyyy')

使用している日付形式に合うように「dd-MM-yyyy」を変更します。

于 2012-03-27T19:23:48.653 に答える