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,现在更新已丢失。
SET CustomerAddress.IsPrimaryAddress =
CASE
WHEN c2.IsPrimaryAddress=1
THEN 1
ELSE CustomerAddress.IsPrimaryAddress
END
Run Code Online (Sandbox Code Playgroud)
PS:我不确定表名,但想法是返回列值本身以使其保持不变,这是一种常见的做法。
| 归档时间: |
|
| 查看次数: |
16925 次 |
| 最近记录: |