Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我可以在保留功能的同时合并多个update语句吗?_Sql_Sql Server_Tsql_Ssms - Fatal编程技术网

Sql 我可以在保留功能的同时合并多个update语句吗?

Sql 我可以在保留功能的同时合并多个update语句吗?,sql,sql-server,tsql,ssms,Sql,Sql Server,Tsql,Ssms,我正在经历一个存储过程,当我遇到大约13条类似于下面的更新语句时,我正试图对其进行优化。我想知道是否有人有比这更好的解决方案。我知道我可以使用case语句或coalesce,这在语义上是相同的,但请记住,所有列都将始终更新。这可能不会给您带来任何问题,但我的事务量可能很大,因此这种方法可能会导致并发问题 UPDATE COGS SET Revenue = 0 WHERE Revenue IS NULL AND monthDate = @targetCOGSdate;

我正在经历一个存储过程,当我遇到大约13条类似于下面的更新语句时,我正试图对其进行优化。我想知道是否有人有比这更好的解决方案。我知道我可以使用case语句或coalesce,这在语义上是相同的,但请记住,所有列都将始终更新。这可能不会给您带来任何问题,但我的事务量可能很大,因此这种方法可能会导致并发问题

UPDATE  COGS
SET     Revenue = 0
WHERE   Revenue IS NULL
        AND monthDate = @targetCOGSdate;

UPDATE  COGS
SET     Costs = 0
WHERE   Costs IS NULL
        AND monthDate = @targetCOGSdate;

UPDATE  COGS
SET     Disposal = 0
WHERE   Disposal IS NULL
        AND monthDate = @targetCOGSdate;

UPDATE  COGS
SET     Trans = 0
WHERE   Trans IS NULL
        AND monthDate = @targetCOGSdate;
如果列为null,请使用合并表达式将列设置为0:

UPDATE  COGS
SET Revenue  = coalesce(Revenue, 0),
    Costs    = coalesce(Costs, 0),
    Disposal = coalesce(Disposal, 0),
    Trans    = coalesce(Trans, 0)
WHERE (Revenue IS NULL or Costs IS NULL or Disposal IS NULL or Trans IS NULL)
  AND monthDate = @targetCOGSdate;
但你为什么要这么做?我会保留空的

是,使用合并:

UPDATE COGS
    SET Revenue = COALESCE(Revenue, 0),
        Costs = COALESCE(Costs, 0),
        Disposal = COALESCE(Disposal, 0),
        Trans = COALESCE(Trans, 0)
    WHERE monthDate = @targetCOGSdate AND
          (Revenue IS NULL OR Costs IS NULL OR Disposal IS NULL OR Trans IS NULL);