【发布时间】:2012-03-27 19:07:37
【问题描述】:
我的 SQL 存储过程中有一行看起来像这样(按预期工作):
HAVING oh.startdate BETWEEN @startDate AND @endDate
但是,再往下我有一行:
AND (oh.user IN (@userIDs))
@userIDs 是一个逗号分隔的 ID 字符串,而 oh.user 是一个 INTEGER,所以我实际上必须将整个 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 转换为字符串的错误。
感谢任何帮助。
谢谢, 托马斯
【问题讨论】:
-
您能否发布您的整个查询、一些示例数据和您的预期结果?
-
oh.startdate、@startDate 和@endDate 使用什么类型?
-
并告诉我们使用的日期格式。 (例如:'21-jan-20012' 或 '21/01/2012')
-
@FrancisP 感谢您的输入,下面的答案非常有效。
-
@bluefeet 感谢您的意见,下面的答案非常有效。
标签: sql sql-server stored-procedures type-conversion sp-executesql