如何在 SQL 中同时发送带有语句的更新批处理

How to send update batch with statements simultaneously in SQL

BEGIN TRANSACTION 

    UPDATE table_x
    SET Part = 8 
    WHERE A = 2 AND B = 2 AND C = 1 AND Code = 'X'

    UPDATE table_x
    SET Part = 0 
    WHERE A = 2 AND B = 2 AND C = 1 AND Code = 'Y'

    UPDATE table_x
    SET Part = 2 
    WHERE A = 2 AND B = 2 AND C = 1 AND Code = 'Z'

    COMMIT TRANSACTION

基本上我们有三行,它们的总和必须为 10(如您现在所见,它是 8+0+2 = 10)。我有一个检查触发器,因此在更新或插入新值时该值始终应为 10,但就目前而言,它无法更新,因为它发送第一个 UPDATE "WHERE A = 2 AND B = 2 AND C = 1 AND Code = 'X' " 进行检查,并且总和将在大多数情况下案例不会通过,因为它会多于或少于 10 个。

我想要的是同时发送所有这些更新,以便值一起更改。有什么办法可以实现吗?

这是你想做的吗:

 UPDATE table_x
    SET Part = CASE WHEN Code = 'X' THEN  8 
                    WHEN Code = 'Y' THEN  0 
                    WHEN Code = 'Z' THEN  2 
               END
  WHERE A = 2 AND B = 2 AND C = 1 AND Code IN ('X','Y','Z')

SQL服务器实际上在触发方面更智能一些,所以一个语句应该有效:

UPDATE table_x
  SET Part = (CASE Code WHEN 'X' THEN 8 WHEN 'Y' THEN 0 ELSE 2 END)
  WHERE A = 2 AND B = 2 AND C = 1 AND Code IN ('X', 'Y', 'Z');

触发器本身必须非常智能地检查 inserted 值而不是 table 中的值,但这是可行的。

或者(在某些情况下可能是更好的解决方案)是 disable 触发更新。这样做的好处是触发代码不需要更改。