gpt4 book ai didi

基于 case 语句的列的 SQL 部分更新?

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:24 25 4
gpt4 key购买 nike

最近我不得不对表进行一些变量更新,虽然我知道 MERGE 语句(尽管需要 catch 所有这些!),但我还执行了以下语句来可选地更新表并希望检查这是“一个好主意”还是有一些我不知道的隐藏后果。

所以在我的例子中,我将一个主键传递给一个表,但是根据传递的参数是否为空,我更新列..显然如果你必须确保强制更新(状态等)那么你只需更新列..这是为了保存多个“IF/THEN”类型结构..

create procedure sp_myprocedure
as
@id bigint,
@field1 int = null,
@field2 varchar(255) = null,
@field3 char(1) = null
begin

update my_table
set
field1 = case when @field1 is not null then @field1 else field1 end,
field2 = case when @field2 is not null then @field2 else field2 end,
field3 = case when @field3 is not null then @field3 else field3 end,
where
id = @id

end

在对上述内容进行一些思考之后,还是最好针对上述场景使用 MERGE 语句?

非常感谢,

最佳答案

虽然可以用更简洁的方式编写,但这很好。

   update my_table
set
field1 = coalesce (@field1,field1)
,field2 = coalesce (@field2,field2)
,field3 = coalesce (@field3,field3)
where
id = @id and coalesce(@field1,@field2,@field3) is not null

您还可以将 coalesce(@field1,@field2,@field3) is not null 移动到包装器 block

if coalesce(@field1,@field2,@field3) is not null
begin

update my_table
set
field1 = coalesce (@field1,field1)
,field2 = coalesce (@field2,field2)
,field3 = coalesce (@field3,field3)
where
id = @id

end

MERGE 语句与此处无关。
对于MERGE,决定是INSERTUPDATE 还是DELETE 基于不存在/存在的记录源/目标表中具有相同合并键的记录。
在您的情况下,它始终是更新

关于基于 case 语句的列的 SQL 部分更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40317553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com