有没有一种方法可以使用SQL;设置字段(如果为“,”;,更新多个字段时,是否不使用动态生成?

有没有一种方法可以使用SQL;设置字段(如果为“,”;,更新多个字段时,是否不使用动态生成?,sql,sql-server,sql-update,sql-server-2014,Sql,Sql Server,Sql Update,Sql Server 2014,给出如下基本更新: update [X] set A = @a , B = @b 有没有一种方法可以使用单个更新单独设置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

给出如下基本更新:

update [X]
set A = @a
  , B = @b
有没有一种方法可以使用单个更新单独设置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来处理

是否有另一种方法使字段完全不更新(逻辑或其他)


如果要设置任何值,则可以设置一个参数,即整行都已修改,因此适当的WHERE在语义上等同于请求。

实际上不会单独更新字段。将更新整行。实际上,更糟糕的是,包含该行的整个数据页都被更新了

对于您想要的,这是典型的解决方案:

update [X]
    set A = coalesce(@a, A),
        B = coalesce(@b, B)
    where @a is not null or @b is not null;