新微赢技术网

标题: 关于存储过程中in的使用方法 [打印本页]

作者: 林风    时间: 2010-1-10 07:13
标题: 关于存储过程中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
作者: 未来的回忆    时间: 2010-1-10 07:13


困了,该睡了……
作者: 痴情浪子    时间: 2010-2-7 14:05
好得不能再好的好帖!




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2