1

我的 SQL 存储过程中有一行看起来像这样(按预期工作):

HAVING  oh.startdate BETWEEN @startDate AND @endDate

但是,再往下,我有一条线:

AND (oh.user IN (@userIDs))

@userIDs 是一个逗号分隔的 ID 字符串,而 oh.user 是一个整数,所以我实际上必须将整个 SQL 查询放入一个动态字符串 (@sql) 中,并将所有参数连接到其中,然后使用

sp_executesql @sql 

除了 BETWEEN 日期外,一切都运行良好,我尝试了几种方法并不断收到错误或没有返回任何结果:

    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 回答