写一个存储过程来更新一张表或者多张。
例:
create proc aaa
@a varchar(**),
@b varchar(**),
@c varchar(**),
@d varchar(**),
@e varchar(**)
as
------------------------
我有时候要更新所有这些参数所对应的列,有时候又只要更新@a,@b;
或者其他的部分参数。
那么我该怎么写 前台如果不给不需要更新的参数赋值又要报错,赋,我又不知道赋什么,因为我不要更新那些字段。
------------------------
我想两个办法来做
1:就是规定一个特殊值,存储过程中,判断传进的参数=特殊值,就不拼这个参数,
如果不等于则拼接起来。最后执行拼接后的整条语句。
这个方法,用是可用但是好象不能防止注入式攻击。
2:就是规定一个特殊值,存储过程中,判断传进的参数=特殊值,直接update set这个参数。这样的话我的参数又多没次update 的次数也越多,效率就是问题了。
怎么办?
------------------------
牛人不知道看懂没,有没办法不拼语句,然后又能判断的update,或者某个特殊值在数据库本身就不不更新?

解决方案 »

  1.   

    想得到动态的update语句,就需要铺装SQL语句
      

  2.   

    想得到动态的update语句,就需要铺装SQL语句
    -----------------------------
    不懂 麻烦说详细点
      

  3.   

    想得到动态的update语句,就需要铺装SQL语句
    up
      

  4.   

    这个要写动态SQL语句,就是拼SQL串,然后Execute下
      

  5.   

    xray2005(风车车--要飞翔,必须靠自己!) 
    说的是 只是我在寻求更好的解决办法。
    -----------------------------
    keystudio(御剑乘风来,除魔天地间,有酒乐逍遥,无酒我亦颠) ( ) 信誉:100 
    我还要去把所有的值都取出来 我多郁闷啊
      

  6.   

    我所想到的只有第一种方法,还有txgaozhao() 不更新就传原值
      

  7.   

    --如果不更新,传如NULL值
    create proc aaa
    @a varchar(**),
    @b varchar(**),
    @c varchar(**),
    @d varchar(**),
    @e varchar(**)
    as
    begin
        update 表 
        set 
            a=isnull(@a,a),
            b=isnull(@b,b),
            c=isnull(@c,c),
            d=isnull(@d,d),
            e=isnull(@e,e),
            f=isnull(@f,f)
    end
    go
      

  8.   

    declare @sql varchar(2000)
    if @a <> 'null'
    set @sql = @sql + ' declare @a varchar(1000) set @a = '+@a
    if @b <> 'null'
    set @sql = @sql + ' declare @b varchar(1000) set @b = '+@b
    ......exec(@sql)
    最后拼出带参数的SQL语句执行 楼主试试
      

  9.   

    --如果不更新,传如NULL值
    ========================
    这个方法好!
      

  10.   

    create proc aaa
    @a varchar(**)=null,
    @b varchar(**)=null,
    @c varchar(**)=null,
    @d varchar(**)=null,
    @e varchar(**)=null
    as
    可以吗,在后台不更新的数据也要付null值
      

  11.   

    参照各位意见得出
    ----------------------
    libin_ftsafe(子陌红尘:TS for Banking Card) ( ) 信誉:100 
    ----------------------
    elvis_gao() ( ) 信誉:100 
    ----------------------
    create proc aaa
    @a varchar(**)=null,
    @b varchar(**)=null,
    @c varchar(**)=null,
    @d varchar(**)=null,
    @e varchar(**=null)
    as
    begin
        update 表 
        set 
            a=isnull(@a,a),
            b=isnull(@b,b),
            c=isnull(@c,c),
            d=isnull(@d,d),
            e=isnull(@e,e),
            f=isnull(@f,f)
    end
    go
    ---------------------
    这样在前台不给某些参数传值也可以,因为默认了。
    ---------------------
    结贴啦