Sql server SQL提取正在工作,但在触发器中不工作

Sql server SQL提取正在工作,但在触发器中不工作,sql-server,tsql,sql-insert,database-trigger,Sql Server,Tsql,Sql Insert,Database Trigger,我试图创建一个触发器,在创建之前,我试图将其测试为执行内部代码。提取代码本身正在工作,但触发器不工作。代码如下: 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 @

我试图创建一个触发器,在创建之前,我试图将其测试为执行内部代码。提取代码本身正在工作,但触发器不工作。代码如下:

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
  • 看起来您正试图创建一个触发器来将结果集返回给应用程序,这应该避免。
  • 这个SQL语句看起来根本不需要游标。这可以通过一个简单的DML语句来实现
  • 在编写触发器以通过触发器将结果返回到应用程序之前,请参阅以下语句


    触发触发器时,结果将返回给调用应用程序,就像存储过程一样。为了防止由于触发器触发而将结果返回给应用程序,请不要在触发器中包含返回结果的SELECT语句或执行变量赋值的语句。一种触发器,包括向用户返回结果的SELECT语句或执行变量赋值的语句,需要进行特殊处理;这些返回的结果必须写入每个允许修改触发器表的应用程序中。如果必须在触发器中进行变量赋值,请在触发器的开头使用SET NOCOUNT语句以防止返回任何结果集。“

    您正在使用哪个数据库?1。游标+触发器是非常反模式的。2.你真的不需要光标,它可以被一个常规的插入和更新所取代,3。你真的需要把它放在扳机里吗?4.这种气味是一种错位的业务规则,它不能更好地适应业务层吗?您如何确定它“不起作用”?1。我同意你的看法。我同意你的意见,我将尽量不去拿。。3.我真的需要触发器,插入时间太重要了,它应该在插入到原始表的同时完成,然后再完成一些其他不依赖的查询。