当更新多个字段而不使用动态生成时,是否可以通过SQL来“设置字段是否”?

问题描述 投票:0回答:1

给出基本更新,例如:

update [X]
set A = @a
  , B = @b

是否有使用单个UPDATE来设置A或B 单独的方法?

以下内容也会更新两个字段,尽管它可能会显示所需的意图。这在逻辑上是有效的,并且无论是否提供相同的值,SQL Server都会很乐意执行更新。

update [X]
set A = CASE WHEN @a IS NOT NULL THEN @a ELSE A END -- could be "a more complex" rule
  , B = CASE WHEN @b IS NOT NULL THEN @a ELSE B END

我知道这可以通过多个UPDATE语句或动态SQL处理。

是否有另一种方法可以使字段全部[[not(逻辑或其他方式)更新?]

可以提出一个论点,如果要设置

any

值,则整个行已被修改,因此适当的WHERE在语义上等同于请求。
sql sql-server sql-update sql-server-2014
1个回答
1
投票
您实际上没有更新字段[[单独。整行将更新。实际上,更糟糕的是,包含行的整个

数据页面都被更新。

对于您想要的,这是典型的解决方案:update [X] set A = coalesce(@a, A), B = coalesce(@b, B) where @a is not null or @b is not null;
© www.soinside.com 2019 - 2024. All rights reserved.