关于存储过程中in的使用方法
在编写程序时,我们会经常使用到批量操作的过程。一但数据批量操作,数据处理时我们就会用到 in 来进行判断。in操作在sql操作如:
Dim IDStr
IDStr="45,58,79,89,100"
Conn.exeCute("Update N_News set IsCheck=1 where ID in("&IDSt&")")
这样执行是没有问题的。
而对存储过程:
Conn.exeCute("UpdateCheck_News '"&IDStr&"'")
CREATE procedure UpdateCheck_News
(
@IDStr varchar(100)
)
as
Begin
Update N_News set IsCheck=1 where ID in(@IDStr)
End
Go
而对于存储过程这样执行,是根本不行。原因在于@IDStr 参数传入后,存储过程把@IDStr 当作一个整体变量和ID进行匹配,自然而然当然是执行有误。
解决此问题的方法如下:
把传存储过程参数变为:IDStr="'45','58','79','89','100'" 这样可以
但是这样我们就要面对一次参数的重新组合。
但如果我们改良一下存储过程,就不用上面那步。对于存储过程我们改为动态sql语句就可以。
改为如下存储过程就可:
CREATE procedure UpdateCheck_News
(
@IDStr varchar(100)
)
as
Begin
declare @SqlStr varchar(1000)
Set @SqlStr="Update N_News set IsCheck=1 where ID in("+@IDStr +")"
exeCute(@SqlStr)
End
Go
[[it] 本帖最后由 天涯听雨 于 2008-7-29 01:53 编辑 [/it]]