gpt4 book ai didi

SQL Update with Case,分配或什么也不做

转载 作者:行者123 更新时间:2023-12-05 08:44:28 24 4
gpt4 key购买 nike

结束这个问题 here , 有没有办法将 CASE 语句放入 SQL UPDATE 中,更新或不执行任何操作。目前我有以下内容:

UPDATE CustomerAddress
SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE 0 END
FROM CustomerAddress
join #AddressToDeleteMasterOfLesserId p1 on CustomerAddress.Id=p1.[Id that is master]
join CustomerAddress c2 on p1.[Id to delete]=c2.Id

问题出现在这一行:

SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE **0** END

否则当我将它设置为 0 时。更新应该检查第一个条件,如果是,则设置为1,但是,如果不满足条件,我不想设置为0,我需要保留原始值。

SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE *CustomerAddress.IsPrimary* END

但是不起作用,因为它从 FROM 语句中获取值,而不是当前设置的值。我想要的是这样的

SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE *Do nothing* END

但这仍然是一个赋值,并试图设置为NULL

这可能吗?

更新:

示例数据:

一对表示地址的 ID

ID to keep  ID to delete
------------------------
10 21
10 22
11 31
12 41

我将重点关注 10 会发生什么。所以 10 有 IsPrimaryAddress=0,21 有 IsPrimaryAddress=1,22 有 IsPrimaryAddress=0.

我相信发生的事情是这样的(伪代码):

设置 IsPrimaryAddress = 如果 21.IsPrimaryAddress=1 然后设置为 21.IsPrimaryAddress 否则设置为 10.IsPrimaryAddress

所以我们将 10.IsPrimaryAddress 设置为 1。现在:

设置 IsPrimaryAddress = 如果 22.IsPrimaryAddress=1 则设置为 22.IsPrimaryAddress 否则设置为 10.IsPrimaryAddress

我希望 10.IsPrimaryAddress 等于 1。但它似乎获得了原始值 0,现在更新已丢失。

最佳答案

SET CustomerAddress.IsPrimaryAddress = 
CASE
WHEN c2.IsPrimaryAddress=1
THEN 1
ELSE CustomerAddress.IsPrimaryAddress
END

PS:我不确定表名,但我的想法是返回列值本身以使其保持不变,这是一种常见的做法。

关于SQL Update with Case,分配或什么也不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9812831/

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