首页 新闻 会员 周边

sql server 存储过程问题

0
[已关闭问题] 关闭于 2010-05-10 10:02

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)

问题补充: 如何让这条语句查到数据 select * from V_WH_PositionStoCheck where Cat_ID in (@Cat_ID) and PS_BatchNo in (@Cat_BNO)
Drin Chan的主页 Drin Chan | 初学一级 | 园豆:6
提问于:2010-05-05 19:38
< >
分享
所有回答(4)
0

比较2次最终生成的语句是不是一样的。

清海扬波 | 园豆:825 (小虾三级) | 2010-05-05 20:25
0

能不能把整个存储过程给出来?

GeorgeHuang | 园豆:55 (初学一级) | 2010-05-05 21:07
整个存储过程就在上面
支持(0) 反对(0) Drin Chan | 园豆:6 (初学一级) | 2010-05-06 09:15
0

这条语句应该无法执行。

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对后面的参数字符串进行即时编译,动态执行。

邀月 | 园豆:25475 (高人七级) | 2010-05-05 23:15
0

执行前定义它两的变量,并传值,然后和第一个一样链接起来。

Astar | 园豆:40805 (高人七级) | 2010-05-06 08:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册