带大小写的SQL更新,分配或不执行任何操作

dan*_*dev 1 sql sql-server-2008 sql-update

即将关闭这个问题后面这里,有没有办法把一个方法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 
Run Code Online (Sandbox Code Playgroud)

问题出现在这条线上:

SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE **0** END
Run Code Online (Sandbox Code Playgroud)

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

SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE *CustomerAddress.IsPrimary* END
Run Code Online (Sandbox Code Playgroud)

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

SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE *Do nothing* END
Run Code Online (Sandbox Code Playgroud)

但这仍然是一项任务,并尝试将其设置为NULL

以上可能吗?

更新:

样本数据:

代表地址的一对ID

ID to keep  ID to delete
------------------------
10          21
10          22
11          31
12          41
Run Code Online (Sandbox Code Playgroud)

我将重点讨论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,现在更新已丢失。

sll*_*sll 5

SET CustomerAddress.IsPrimaryAddress = 
      CASE 
         WHEN c2.IsPrimaryAddress=1 
         THEN 1 
         ELSE CustomerAddress.IsPrimaryAddress 
      END
Run Code Online (Sandbox Code Playgroud)

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