gpt4 book ai didi

sql-server - SQL 中的触发器问题

转载 作者:行者123 更新时间:2023-12-05 00:26:36 24 4
gpt4 key购买 nike

我正在寻找一个触发器,它会在位“关闭”时自动将表格出价中的最高价格插入到表格反对者中?从 0 变为 1。

我有一个对象表,它有值(对象编号、最终价格(空)、关闭?(位)(非空,默认为 0))。

表 bids 的值为 (Objectnumber,euro(private of the bid),username)

这是我目前得到的,

CREATE TRIGGER AF5 ON objects
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @objectnumber numeric(10)
DECLARE @endprice numeric(7,2)
DECLARE @closed? bit
SET @objectnumber = (SELECT objectnumber from inserted)
SET @endprice =(SELECT endprice from inserted)
SET @closed? =(SELECT closed? from inserted)
IF EXISTS (
SELECT subjectnumber
FROM inserted
WHERE closed? = 1 AND endprice = NULL
)
BEGIN
PRINT ('Found')
update objects set endprice = (
SELECT MAX(b.euro)
from bids b INNER JOIN objects v
on @objectnumber = b.objectnumber
where @closed? = 1
)
END
ELSE
BEGIN
RAISERROR ('Error', 1, 1)
ROLLBACK
END
END
GO

我不断收到的错误是消息 512,级别 16,状态 1,过程 AF5,第 8 行 [批处理起始行 3834]子查询返回了 1 个以上的值。当子查询跟在 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

最佳答案

inserted 表可以包含多个行。

我删除了您的 if 条件,因为在 IF 内部更新后可以再次触发触发器。如果需要,检查 @@ROWCOUNT 变量以获取更新的行数并将其与 inserted 表中的行数进行比较

CREATE TRIGGER AF5 ON objects
FOR INSERT, UPDATE
AS
BEGIN
IF @@ROWCOUNT = 0 RETURN

UPDATE O
SET endprice = B.EndPrice
FROM Objects O
INNER JOIN inserted I on O.objectnumber = I.objectnumber
CROSS APPLY (
SELECT EndPrice = MAX(B.euro)
FROM bids B
WHERE B.objectnumber = O.objectnumber
) B
WHERE I.[Closed?] = 1 AND I.endprice IS NULL AND B.EndPrice IS NOT NULL
END

关于sql-server - SQL 中的触发器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44026564/

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