一个数据表 id   用户名  密码      标签
id   name   password   tag
1    中国   ok          2
2    美国   ok          3
3    北京   ok          4我使用存储过程来修改id=1的记录 把  中国   修改成  中国人  其它的不改create procedure update_user @id int,@name varchar(10),@password varchar(10),@tag int as  begin
update 表 set 
name=isnull(@name,name),
password=isnull(@password,password),
tag=isnull(@tag,tag)
where id=@id
end 
go但是因为 tag 是int 类型   它默认是0  我一修改就把它改成0了  变成了id   用户名  密码      标签
id   name   password   tag
1    中国人   ok        0
2    美国   ok          3
3    北京   ok          4怎么样 在存储过程中判断如果传来的字段是0 就不修改它

解决方案 »

  1.   

    if(@tag!=0)
    begin
    把修改代码放进来就可以了  如果不等于0 就修改 等于0 不做任何操作
    end
      

  2.   


    具体不等于0 上面那种!=0我认为可以 但我平时都用 <>0 来判断 不等于0
      

  3.   

    create procedure update_user @id int,@name varchar(10),@password varchar(10),@tag int as  
    begin
    if @tag=0 
    begin
    update 表 set
    name=isnull(@name,name),
    password=isnull(@password,password)
    where id=@id
    end
    else
    begin
    update 表 set
    name=isnull(@name,name),
    password=isnull(@password,password),
    tag=isnull(@tag,tag)
    where id=@id
    end
    end
    go 
      

  4.   

    三楼的方法行是行,但是如果一个表中有好多 int 类型的字段,不可能这样一个一个判断它是否为0
    有没有一个办法就像 isnull判断如果是空就不更新它。
      

  5.   

    create procedure update_user @id int,@name varchar(10),@password varchar(10),@tag int as  begin
    update 表 set
    name=isnull(@name,name),
    password=isnull(@password,password),
    tag=case when @tag=0 then tag else @tag end
    where id=@id
    end
    go