如何使用动态查询中的字段创建SQL Where子句?

时间:2011-05-05 15:20:55

标签: tsql stored-procedures

这是我尝试运行的较大查询的一小部分示例。这是一个动态查询,所以我将整个事物放入一个字符串然后执行它。然而,它失败了。用户只发送月份和年份。然后我执行它。但它告诉我不能绑定字段。

declare @sqlstr varchar(5000)
set @sqlstr = 'SELECT     FirstName, LastName FROM  MyTable Where '
set @sqlstr = @sqlstr + CONVERT(varchar(2), MyTable.MyDateMonth) + '/1/' + CONVERT(varchar(4), MyTable.MyDateYear)
set @sqlstr = @sqlstr + ' = ''8/1/2006'''

exec(@sqlstr)

1 个答案:

答案 0 :(得分:3)

你错过了CONVERT周围的一些引用

set @sqlstr = @sqlstr + 'CONVERT(varchar(2), MyTable.MyDateMonth) + ''/1/'' + CONVERT(varchar(4), MyTable.MyDateYear)'

添加print @sqlstr可以帮助您调试它。

此外,您将自己暴露于SQL injection,因此您应sp_ExceuteSQL而非仅仅执行