我的 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 转换为字符串的错误。
任何帮助表示赞赏。
谢谢,托马斯