因为MSSQL中的IN查询是多值查询,也许你的一个参数会包含有很多值,但是在MSSQL解析的时候只会当做一个字符串来处理,不是处理多个字符串,IN多值处理其实就是多字符串值的处理。
所以为了能达到想要的IN多值参数化查询,就必须进行动态SQL语句的拼接,因为动态SQL其实就是很多个字符串组成的一个动态SQL语句,只是最后执行的时候的必须是用execute sp_executesql @sql这样执行然后得出你想要的结果。首先使用的是Northwind数据库进行演示的,代码如下:
DECLARE @preName nvarchar(4000)
SET @preName='@Davolio@,@Fuller@,@Leverling@'
declare @lastName nvarchar(4000)
set @lastName=replace(@preName,'@','''')
declare @sql nvarchar(2000)
set @sql=N'SELECT *FROM Employees where lastName IN ('+@lastName+')'
execute sp_executesql @sql
动态SQL语句如上。
你也可以进行编写存储过程。
CREATE PROC lOOKINFO(@prename nvarchar(1000))
as
.....