设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 45|回复: 3
打印 上一主题 下一主题

关于存储过程中in的使用方法

[复制链接]
跳转到指定楼层
1#
发表于 2010-1-10 07:13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在编写程序时,我们会经常使用到批量操作的过程。一但数据批量操作,数据处理时我们就会用到 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
2#
发表于 2010-1-10 07:13:24 | 只看该作者


困了,该睡了……
回复 支持 反对

使用道具 举报

3#
发表于 2010-2-7 14:05:07 | 只看该作者
好得不能再好的好帖!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-20 09:38 , Processed in 0.108754 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表