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<>1
、ranked>1
、ranked!=1
、ranked=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 不更新的更新语句的主要内容,如果未能解决你的问题,请参考以下文章