alter PROCEDURE P_Select_CatInfoByCatIDorCatBNO '200906240003,200906240004','12291603,12291719'
@Cat_ID nvarchar(1000),
@Cat_BNO nvarchar(1000)
as
为什么下面这个执行就可以查到数据
exec('select * from V_WH_PositionStoCheck where Cat_ID in ('+@Cat_ID+') and PS_BatchNo in ('+@Cat_BNO+')')
下面这个执行就查不到数据
select * from V_WH_PositionStoCheck where Cat_ID in (@Cat_ID) and PS_BatchNo in (@Cat_BNO)
比较2次最终生成的语句是不是一样的。
能不能把整个存储过程给出来?
这条语句应该无法执行。
select * from V_WH_PositionStoCheck where Cat_ID in (@Cat_ID) and PS_BatchNo in (@Cat_BNO)
这里@Cat_ID和@Cat_BNO是表达式,只是这个表达式的值为事先指定的值,此时SQL Server在编译时无法执行这个语句。
而exec其实是调用内置扩展API对后面的参数字符串进行即时编译,动态执行。
执行前定义它两的变量,并传值,然后和第一个一样链接起来。