IF 不更新的更新语句

Posted

技术标签:

【中文标题】IF 不更新的更新语句【英文标题】:Update statement with IIF not upading 【发布时间】:2020-12-17 17:55:27 【问题描述】:

我有一个简单的表格,上面有订单号、文章号和排名:

select * from tbl_temp_ranked

我只想更新 rank=2 的另一个表。所以我使用以下更新语句

update hbs
set hbs.[2ND_NEXT_ORDER_Nr]=iif(ranked=2, ranked, null)
from TBL_HAKA_BASE_STAGE hbs
join tbl_temp_ranked tmp
on hbs.artikelnummer=tmp.artikelnummer
where hbs.Artikelnummer=115996

我的目标表 (TBL_HAKA_BASE_STAGE) 永远不会更新。它只在我写的时候更新

iif(ranked=1, ranked, null)

只有在这种情况下,我的目标表才会更新!写 ranked<>1ranked>1ranked!=1ranked=2 不会更新我的表。与此 SET-Statement 中的 case when-conditions 相同。投射也没有帮助!

我可以在我的WHERE-statements 中添加这个条件,这很有帮助,是的,但是这个简短的 SQL 示例只是大语句中的一个非常短的代码,所以这对我来说不是一个很好的解决方案。这会让我一遍又一遍地重复所有代码。

这是两个表的结构,也许有帮助

CREATE TABLE [dbo].[tbl_temp_ranked](
    [auftragsnummer] [float] NULL,
    [artikelnummer] [float] NULL,
    [ranked] [bigint] NULL
)

CREATE TABLE [dbo].[TBL_HAKA_BASE_STAGE](

    [Artikelnummer] [float] NULL,
    [NEXT ORDER Nr] [float] NULL
) 

这是 SQL Server 2017。

【问题讨论】:

【参考方案1】:

“排名”表中有重复项。我想你想要一个left join

update hbs
    set hbs.[2ND_NEXT_ORDER_Nr] = tmp.ranked
    from TBL_HAKA_BASE_STAGE hbs left join
         tbl_temp_ranked tmp
         on hbs.artikelnummer = tmp.artikelnummer and tmp.ranked = 2
    where hbs.Artikelnummer = 115996;

【讨论】:

啊,是的,现在我明白了...一行覆盖了第二行..它只接受排名 1,因为它是最后一行正在更新..该死的,这花了我很多时间...谢谢!

以上是关于IF 不更新的更新语句的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle 的更新查询中使用 if 语句

无法让 StateHasChanged 更新 @if 语句

如何在更新语句中使用 if 条件

mysql中的if语句?

为 Oracle 更新查询 if 语句

后台代码更新语句要先查询再更新吗?