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
触发触发器时,结果将返回给调用应用程序,就像存储过程一样。为了防止由于触发器触发而将结果返回给应用程序,请不要在触发器中包含返回结果的SELECT语句或执行变量赋值的语句。一种触发器,包括向用户返回结果的SELECT语句或执行变量赋值的语句,需要进行特殊处理;这些返回的结果必须写入每个允许修改触发器表的应用程序中。如果必须在触发器中进行变量赋值,请在触发器的开头使用SET NOCOUNT语句以防止返回任何结果集。“您正在使用哪个数据库?1。游标+触发器是非常反模式的。2.你真的不需要光标,它可以被一个常规的插入和更新所取代,3。你真的需要把它放在扳机里吗?4.这种气味是一种错位的业务规则,它不能更好地适应业务层吗?您如何确定它“不起作用”?1。我同意你的看法。我同意你的意见,我将尽量不去拿。。3.我真的需要触发器,插入时间太重要了,它应该在插入到原始表的同时完成,然后再完成一些其他不依赖的查询。