首页 > 解决方案 > 不更新 IIF 的更新语句

问题描述

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

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<>1, ranked>1, ranked!=1,ranked=2不会更新我的表格。case when此 - 语句中的- 条件相同SET。铸造也没有帮助!

我可以在我的语句中添加这个条件,这WHERE很有帮助,是的,但是这个简短的 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 服务器 2017。

标签: sqlsql-serversql-updatecase-wheniif

解决方案


您在“排名”表中有重复项。我想你想要一个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;

推荐阅读