SQL Server 中的错误更新

Posted

技术标签:

【中文标题】SQL Server 中的错误更新【英文标题】:Wrong update in SQL Server 【发布时间】:2020-07-02 03:38:27 【问题描述】:

更新查询有效,但不正确。

有什么问题?

UPDATE Orders
SET discount = 10
WHERE EXISTS (SELECT C.discount 
              FROM Orders AS C
              JOIN OrderItems AS O ON C.orderID = O.orderID
              WHERE (C.dateOrder BETWEEN '01.07.2013' AND GETDATE()) 
              GROUP BY C.discount
              HAVING COUNT(O.orderID) > 1) 

这本身就有效

SELECT C.discount 
FROM Orders AS C 
JOIN OrderItems AS O ON C.orderID = O.orderID
WHERE (C.dateOrder BETWEEN '01.07.2013' AND GETDATE()) 
GROUP BY C.discount
HAVING COUNT(O.orderID) > 1

而且结果是正确的

【问题讨论】:

“不正确”究竟是什么意思? 您似乎没有引用您在存在子句中更新的表... 我们不知道您要达到什么目的,因此您需要解释一下,以便我们了解它是如何不起作用的。 查询显示 2 列。更新更新整个表 所以请展示一些示例数据,以及您的预期结果。并尝试用文字进行解释,例如“我想更新所有带有折扣的订单和多个订单行以获得 10% 的新折扣”。 【参考方案1】:

我认为这可能会做你想做的事 - 但我猜我并没有完全理解你想要做什么。

UPDATE C SET
  discount = 10
FROM ORDERS C
WHERE C.dateOrder between '01.07.2013' and GETDATE()
-- Updating only orders with an existing discount
AND C.discount IS NOT NULL
-- And with more than 1 order line
AND (
  SELECT COUNT(*)
  FROM OrderItems AS O 
  WHERE O.orderID = C.orderID
) > 1 

【讨论】:

以上是关于SQL Server 中的错误更新的主要内容,如果未能解决你的问题,请参考以下文章

无法更新 sql server 中的数据 - arithabort 错误

使用 SQL Server 中的函数插入/更新/删除

无法从 R 中的 DF 更新 SQL Server 中的值

更新 SQL Server 2005 中的表列

更新或插入 SQL Server 时忽略错误行

单击更新后,sql server db中的行将被删除。 id 是唯一有数据的字段