SQL Вставка GROUP BY не работает - подзапрос вернул более 1 значения - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть триггер после утверждения элемента, который запускает поиск и добавляет данные в новую таблицу. Теперь я получаю сообщение «Subquery вернул больше, чем 1 значение»

Я прочитал другие ответы, но ничего, что не решает проблему в целом ... поэтому я пока не получил ответов.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[trg_BID_APROVAL] 
ON [dbo].[BID]
AFTER UPDATE
AS
BEGIN
    IF (SELECT BID_APPROVED FROM INSERTED) = 0 --if NO then do nothing else create and send purchase order
    BEGIN
        RETURN
    END
    ELSE

    DECLARE @BIDDY_ID INT;
    SELECT @BIDDY_ID = BID_ID FROM INSERTED;

    DECLARE @SUPPY_ID TABLE(SUP_ID INT,BID_ID INT,PO_DATE DATE DEFAULT GETDATE());
    INSERT INTO @SUPPY_ID(SUP_ID, BID_ID)
        SELECT 
            SUP_ID,
            BID_ID
        FROM
            BIDLINE BL
        INNER JOIN 
            PRODUCTS P ON BL.PROD_ID = P.PROD_ID
        WHERE 
            BID_ID = @BIDDY_ID AND SUP_ID > 0
        GROUP BY 
            SUP_ID,BID_ID;

    INSERT INTO PURCHASE_ORDER (BID_ID, SUP_ID, PO_DATE)
        SELECT BID_ID, SUP_ID, PO_DATE 
        FROM @SUPPY_ID
END

Текущая ERD для базы данных

1 Ответ

0 голосов
/ 06 февраля 2020

На самом деле проблема в if состоянии, мы можем изменить условие следующим образом

IF (SELECT BID_APPROVED FROM INSERTED) = 0 

На

IF EXISTS(SELECT BID_APPROVED FROM INSERTED where BID_APPROVED=0)

, тогда оно будет работать в вашем коде

...