| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 987 人关注过本帖
标题:关于存储过程中in的使用方法
只看楼主 加入收藏
天涯听雨
Rank: 2
来 自:东莞
等 级:论坛游民
威 望:4
帖 子:497
专家分:64
注 册:2007-8-25
结帖率:100%
收藏
 问题点数:0 回复次数:1 
关于存储过程中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]]
搜索更多相关主题的帖子: 批量 数据 编写 
2008-07-29 01:19
天涯听雨
Rank: 2
来 自:东莞
等 级:论坛游民
威 望:4
帖 子:497
专家分:64
注 册:2007-8-25
收藏
得分:0 


困了,该睡了……

从明天起做幸福的人,喂马劈柴周游世界!
2008-07-29 01:56
快速回复:关于存储过程中in的使用方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027520 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved