如有以下参数@id,@name,@password,@email,@qq   
    
我有时候只是想更新其中的@name,@password,有时想更新@email,@qq,或者其他的参数,而不是每次都全部更新。如果没给出的参数,则不更新没给出参数的列。不是用默认去覆盖那列值,有办法么?除了判断参数是否为空,再去拼update的sql的这种方法,还有别的办法么??

解决方案 »

  1.   

    个人觉得是没有的,最起码我没见过.我觉得你可以将你的条件写到一个表中,更新的时候参考这个表来进行更新.你觉得可以吗?不行的话就写CASE语句判断了
      

  2.   

    update tb 
    set id=isnull(@id,id),
        name= isnull(@name,name),
        email= isnull(@email,email),
        QQ=isnull(@qq,,qq)
    where ....
      

  3.   


    create proc  proc_teex(
    @id int,
    @name varchar(10),
    @password varchar(10) ,@email varchar(10),
    @qq  varchar(10)
    )
    begin
     declare @sql varchar(5000)
    set @sql =''
       if(@id !='' )
       begin
       set @sql = ' update 表 set id ='+@id
       end
       if(@name !='' )
       begin
       set @sql = @sql+',name ='+@name
       end
      .................
       set @sql =@sql +'where  '
    end