我在桌面上创建了一个触发器,这是我的第一次。SQL Server:触发器停止工作
当一条记录被插入到我的TableA中时,触发器会向同一个TableA插入一条新记录。
当我插入符合语句中设置的条件的记录时,触发器会正确动作。
当我插入一条不符合这些条件的记录时,触发器无法执行。
问题是,如果我现在再添加一条符合条件的新记录,那么触发器就不再被执行。当我插入不符合条件的记录时,它似乎停止工作。
如果我删除了第2点中添加的条件未满足条件的记录,则它再次开始工作。奇怪,无法理解。有什么建议吗?
情景:当客户第一次购买属于StockType=1
的商品时,新商品将被添加到同一张发票中。它工作正常。
如果客户购买不属于StockType=1
的其他产品,则不会触发该触发器。这很好。
之后,触发器将不会再次被执行。这是原始的语句代码。
SET NOCOUNT ON;
DECLARE @SerialNo NVARCHAR(50)
SET @SerialNo = (SELECT TOP 1 SNSerialNoTx
FROM T_SNSerialNo
WHERE (SNStockItemID = 7058 AND SNInvoiceID_N IS NULL))
INSERT INTO T_IIInvoiceItem (IIInvoiceID, IIProfitCenterID, IIStockItemID, IISerialNoTx_N,
IIQtyIn, IICostPriceCompsTx, IITaxBandIDsTx, IITaxRatesTx,
IIStockNoTx, IIStockItemTx, IIStockTypeID, IIStockTypeTx,
IIManufacturerID, IIManufacturerTx, IICustID)
SELECT
IIInvoiceID, 23, 7058, @SerialNo,
IIStockTypeID, '-1:[email protected]', 0, 0,
'Training.EUCS',
(SELECT 'Online Training (SN:'[email protected]+')'), 40,'Online Training', 7, 'Company', IICustID
FROM inserted
WHERE IIStockTypeID = 1
AND IICustID IN (SELECT IICustID
FROM T_IIInvoiceItem
INNER JOIN T_InInvoice ON InInvoiceID = IIInvoiceID
INNER JOIN T_CuCust ON CuCustID = IICustID
WHERE IIStockTypeID = 1 AND InTransStatusID = 0
GROUP BY IICustID
HAVING COUNT(IICustID) = 1)
触发代码
ALTER TRIGGER [dbo].[SerialTrigger]
ON [dbo].[T_IIInvoiceItem]
AFTER INSERT
请准备这个问题的简短,完整的摄制。你可能会像你一样发现你的错误。如果没有,请将其添加到您的问题中。 –
@ DavidBrowne-Microsoft我发布了实际的声明。 – DeepDiver
我的猜测是你的insert语句正在检查表中是否存在一行。第一次,不存在,并且在插入行后触发器触发。第二次,该行已经存在于'T_IIIInvoiceItem'中,并且什么都不插入。没有插入物,没有触发点火。你可以附加你的触发代码吗?如果触发条件不满足,您可能希望调用事务回滚。 – Xedni