有一个存储过程,有参数id,username,name,age
里面只有一句update 表 set username = @username 。。。。。。 where id=@id
问题来了
当@name为空的时候不更新name,当@name不为空的时候,同时也更新name
age也一样操作
这个存储过程怎么写
求高人
sql语句,存储过程,智能更新
答案:5 悬赏:40
解决时间 2021-02-17 18:04
- 提问者网友:控制庸俗
- 2021-02-17 07:33
最佳答案
- 二级知识专家网友:山鬼偶尔也合群
- 2021-02-17 07:59
简单啊,用if判定一下就可以了啊,在update之前先判定name是否为空:
if isnull(@name,'')!=''
update 表 set username = @username 。。。。。。 where id=@id
同等道理,age也一样的做就可以了。当然,判定条件并列的话,你可以一起判定
if isnull(@name,'')!=''
update 表 set username = @username 。。。。。。 where id=@id
同等道理,age也一样的做就可以了。当然,判定条件并列的话,你可以一起判定
全部回答
- 1楼网友:修女的自白
- 2021-02-17 12:18
可以先将多个商品id拼成一个字符串("3,4,5")再传进去
create procedure pro_deleteproduct
@uid int ,
@pids varchar(50)
as
declare @sql varchar(200)
begin
set @sql= 'delete from products where productid = '+ convert(varchar(20),@uid) +' and productid in ('+@pids+')'
--print @sql
exec (@sql)
end
go
- 2楼网友:情战凌云蔡小葵
- 2021-02-17 10:59
额,我觉得你这个就是一个简单的判断啊,@name为空不执行update语句,不为空执行update语句,加上一个if语句就可以了么
oracle 写法
if @name is not null
update 表 set username = @username 。。。。。。 where id=@id
end if;
- 3楼网友:浪女动了心
- 2021-02-17 09:32
如果想使用多条语句的话, 有两种方法:
(1)使用if语句: 分别判断@name和@age是否为空, 然后根据不同的情况分别使用不同的update语句进行数据修改(两个判断条件组合的话, 应该有4种不同结果). 比如其中一种为:
if(@name="" and @age!="")
{update...set username=@username, age=@age where id=@id}
(2)使用多条update语句,分别对不同的字段进行修改. 此时就需要把更新条件都放到where语句中. 因为需要更新的3个字段的"完整判定条件"都不同, 所以需要3条update语句:
update...set username=@username where id=@id
update...set name=@name where id=@id and @name!=""
update...set age=@age where id=@id and @age!=""
从上面的方法也可以看出, where子句对于条件的使用, 仅限于从表中筛选行. 筛选出来后, set子句对每一行的处理方式都是一样的. 所以, 如果想只用一条update语句完成整个功能, 就必须在where中一次性把所有"可能要修改"的行都筛选出来.
因为这里还要求对不同的行进行不同的处理, 所以, 只能把条件控制加到set子句中.
可以使用case函数:
update...set
username=@username,
name=(case @name when "" then name else @name end)
age=(case @age when "" then age else @age end)
where id=@id
- 4楼网友:一池湖水
- 2021-02-17 08:55
不知道是不是这个意思:
update 表 set username=@username,name=case when @name<>'' then @name else name end,age=case when @age<>'' then @age else age end where id=@id
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯