gpt4 book ai didi

sql-server - WHERE IN (SELECT NonExistingColumnName) 导致意外行为

转载 作者:行者123 更新时间:2023-12-02 18:37:11 25 4
gpt4 key购买 nike

我最近遇到了一种情况,我需要从表中删除一些行并拼写错误的列名。没有抛出任何错误,并且所有行都已从表中删除。这是重现该问题的脚本。

有一个订单表,其中包含四个带有 OrderID 的订单。有一个具有一个 ItemID 的 LIST_TO_DELETE 表。

我应该使用

DELETE TOP(1) FROM #Orders WHERE OrderID IN (SELECT ItemID FROM #LIST_TO_DELETE  )

我用的是

DELETE TOP(1) FROM #Orders WHERE OrderID IN (SELECT OrderID FROM #LIST_TO_DELETE  )

这导致 #Orders 表中的所有行都被删除,而我只想删除一行。

CREATE TABLE #Orders (OrderID INT, OrderName VARCHAR(100))
INSERT INTO #Orders(OrderID, OrderName) VALUES (1,'Order One'),(2,'Order Two'),(3,'Order Three'), (4,'Order Four')

CREATE TABLE #LIST_TO_DELETE (ItemID INT);INSERT INTO #LIST_TO_DELETE(ItemID) VALUES (1)

DECLARE @rowcount INT = 1
WHILE @rowcount > 0
BEGIN
DELETE TOP(1) FROM #Orders WHERE OrderID IN (SELECT OrderID FROM #LIST_TO_DELETE )
SET @rowcount = @@rowcount
END

SELECT * FROM #Orders

DROP TABLE #Orders
DROP TABLE #LIST_TO_DELETE

在我的原始代码中,Orders 表是真实的,LIST_TO_DELETE 是一个表变量,但使用什么表类型似乎没有区别。如果我使用 OrderID 或 ItemID 之外的任何列名称,则会收到错误

DELETE TOP(1) FROM #Orders WHERE OrderID IN (SELECT OtherID FROM #LIST_TO_DELETE  )
Invalid column name 'OtherID'

为什么这段代码会这样?

最佳答案

这是一个已知问题。

以下语句会错误地从用户表中删除所有行:

DELETE FROM users WHERE user_id IN (SELECT user_id FROM groups);

即使组表没有名为 user_id 的列。

但是,以下语句将引发错误:

DELETE FROM users WHERE user_id IN (SELECT g.user_id FROM groups g);

Msg 207, Level 16, State 1, Line 1
Invalid column name user_id

编辑

DELETE TOP(1) FROM #Orders WHERE OrderID IN (SELECT OtherID FROM #LIST_TO_DELETE  )
Invalid column name 'OtherID'

这会引发错误,因为 #Orders 中不存在 OtherID

关于sql-server - WHERE IN (SELECT NonExistingColumnName) 导致意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46091069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com