SQL выборка работает, но не работает в триггере - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь создать триггер, перед созданием я пытаюсь проверить его на выполнение кода внутри.Коды извлечения работают сами по себе, но триггер не работает.Вот код:

USE [PMIDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[BRK_ÇEKME_KAP_INSERTED]
ON [dbo].[ATMATERIALTRANS]
FOR INSERT
AS BEGIN
    DECLARE @RDATE DATE
    DECLARE @MAKİNE VARCHAR(10)
    DECLARE @OKUTULAN_BARKOD VARCHAR(20)
    DECLARE @MIKTAR INT
    DECLARE @WC_ID INT
SELECT * FROM ATMATERIALTRANS

DECLARE CUR CURSOR 
FOR 

    SELECT TDATE, WORKCENTERS.CODE, ATMATERIALS.BARCODE, ATMATERIALS.AMOUNT, WC_ID  FROM INSERTED T1     
                                LEFT JOIN ATCOMPOSITIONS ON ATCOMPOSITIONS.ID=T1.COMPID
                                LEFT JOIN WORKCENTERS ON WORKCENTERS.ID=T1.WC_ID
                                LEFT JOIN ATMATERIALS ON ATMATERIALS.ID=ATCOMPOSITIONS.MATERIALID
        WHERE T1.COMPID IS NOT NULL AND WORKCENTERS.CODE LIKE 'DD%'

OPEN CUR 
FETCH NEXT FROM CUR INTO @RDATE, @MAKİNE, @OKUTULAN_BARKOD,@MIKTAR, @WC_ID
WHILE @@FETCH_STATUS=0 BEGIN
        INSERT INTO BURAK..ÇEKME_KAP (TARİH,MAKİNE,OKUTULAN_BARKOD,MİKTAR, HAMMADDE_GCKOD)
        VALUES 
        (@RDATE,
        @MAKİNE,
        @OKUTULAN_BARKOD,
        @MIKTAR, 'G')

        UPDATE BURAK..MALKABUL_BARKOD SET BURAK..MALKABUL_BARKOD.KULLANILDI =1 WHERE BURAK..MALKABUL_BARKOD.BARKOD=@OKUTULAN_BARKOD
    FETCH NEXT FROM CUR INTO @RDATE, @MAKİNE, @OKUTULAN_BARKOD,@MIKTAR, @WC_ID      
END
CLOSE CUR
DEALLOCATE CUR
END

1 Ответ

0 голосов
/ 06 июня 2018
  1. Похоже, вы пытаетесь создать триггер для возврата набора результатов в приложение, чего следует избегать.
  2. Этот оператор SQL выглядит, курсор вообще не требуется.Это может быть достигнуто с помощью простого оператора DML.

Перед тем как написать триггер, обратитесь к приведенным ниже инструкциям, чтобы вернуть результат приложению через триггер.

"Когда срабатывает триггер, результаты возвращаются вызывающему приложению, как и в случае хранимых процедур. Чтобы предотвратить возвращение результатов в приложение из-за срабатывания триггера, не включайте ни операторы SELECT, которые возвращают результаты, ни операторыкоторые выполняют присваивание переменных в триггере. Триггер, который включает либо операторы SELECT, которые возвращают результаты пользователю, либо операторы, которые выполняют присваивание переменных, требует специальной обработки, эти возвращаемые результаты должны быть записаны в каждом приложении, в котором внесены изменения в таблицу триггеров.разрешено. Если в триггере должно произойти присвоение переменной, используйте инструкцию SET NOCOUNT в начале триггера, чтобы предотвратить возврат любых наборов результатов. "

...