gpt4 book ai didi

sql-server - 子查询返回了 1 个以上的值。当子查询跟随 = 或当子查询用作表达式时,这是不允许的?

转载 作者:行者123 更新时间:2023-12-01 09:26:49 25 4
gpt4 key购买 nike

我想在一个表中插入值后更新多个表和值,所以我创建了一个触发器。它适用于插入一行,但一旦我插入更多行,SQL Server 就会出现以下错误:

subquery returned more than 1 value. this is not permitted when the subquery follows = or when the subquery is used as an expression?



这是我的触发器:
CREATE TRIGGER [dbo].[tbl_Sales_ForInsert]
ON [dbo].[SALES]
FOR INSERT
AS
BEGIN
DECLARE @ITEMMODEL varchar(100)

SELECT @ITEMMODEL = ITEM_MODEL FROM inserted

UPDATE SALES
SET PROFIT = TOTAL_PRICE - (SELECT QUANTITY FROM SALES WHERE ITEM_MODEL = @ITEMMODEL) * (SELECT RATE FROM ITEM_DETAILS WHERE ITEM_MODEL = @ITEMMODEL)
WHERE ITEM_MODEL = @ITEMMODEL

UPDATE ITEM_DETAILS
SET QUANTITY = QUANTITY - (SELECT QUANTITY FROM SALES WHERE ITEM_MODEL = @ITEMMODEL)
WHERE ITEM_MODEL = @ITEMMODEL

--UPDATE ITEM_DETAILS SET AMOUNT = AMOUNT - (SELECT RATE FROM ITEM_DETAILS WHERE ITEM_MODEL=@ITEMMODEL) * (SELECT QUANTITY FROM SALES WHERE ITEM_MODEL=@ITEMMODEL) where ITEM_MODEL=@ITEMMODEL
END

当我在 SALES 中插入数据时第一次表更新成功,但第二次它给了我上面的错误记住 ITEM_MODEL是 SALES 表中的外键约束。

我一直在忍受这个错误,有人可以帮我吗?

最佳答案

您的根本缺陷是您似乎希望触发器被触发 每行一次 - 这是 不是 SQL Server 中的情况。相反,触发器会触发 每条语句一次 ,以及伪表 Inserted可能包含 多行 .

鉴于该表可能包含多行 - 您希望在这里选择哪一行?

SELECT @ITEMMODEL = ITEM_MODEL FROM inserted

未定义 - 您可能会从 Inserted 中的任意行获取值.

您需要使用 Inserted 的知识重写整个触发器。 威尔包含多行!您需要使用基于集合的操作 - 不要期望 Inserted 中只有一行!

因此,在您的情况下,您的触发器代码应如下所示:
CREATE TRIGGER [dbo].[tbl_Sales_ForInsert]
ON [dbo].[SALES]
FOR INSERT
AS
BEGIN
-- update the dbo.Sales table, set "PROFIT" to the difference of
-- TOTAL_PRICE and (QUANTITY * RATE) from the "Inserted" pseudo table
UPDATE s
SET s.PROFIT = i.TOTAL_PRICE - (i.QUANTITY * i.RATE)
FROM dbo.Sales s
INNER JOIN Inserted i ON i.ITEM_MODEL = s.ITEM_MODEL

-- update the dbo.ITEM_DETAILS table
UPDATE id
SET id.QUANTITY = id.QUANTITY - i.Quantity
FROM dbo.ITEM_DETAILS id
INNER JOIN Inserted i ON id.ITEM_MODEL = i.ITEM_MODEL
END

关于sql-server - 子查询返回了 1 个以上的值。当子查询跟随 = 或当子查询用作表达式时,这是不允许的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21967909/

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