我有表QuoteDetail,其中多行具有相同的引号。 可以使用批量删除删除记录'从QuoteDetail删除其中QuoteNo ='12345' 如何使用删除后触发器记录所有已删除的行? 下面是我的触发器脚本,但只记录1行,其余的则被丢弃。
CREATE TRIGGER [dbo].[trgcsms_QuoteDetail_DeleteLogs] ON [CSMS].[dbo].[QuoteDetail]
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @QuoteNo varchar(50)
DECLARE @SeqNo int
DECLARE @ItemCode varchar(50)
DECLARE @Qty float
DECLARE @NetPrice float
DECLARE @TotAmt float
SELECT @QuoteNo = DELETED.[QuoteNo]
,@SeqNo = DELETED.[SeqNo]
,@ItemCode = DELETED.[ItemCode]
,@Qty = DELETED.[Qty]
,@TotAmt = DELETED.[TotAmt]
FROM DELETED
INSERT INTO [dbo].[QuoteDetailDeleteLogs]
(
[QuoteNo]
,[SeqNo]
,[ItemCode]
,[Qty]
,[TotAmt]
)
VALUES
(
@QuoteNo
,@SeqNo
,@ItemCode
,@Qty
,@NetPrice
,@TotAmt
)
END
答案 0 :(得分:1)
你几乎得到了它。只是不使用" @ variables"而是使用表格。因为毕竟你想要多行,对吧?这也被称为"表"。
另外值得注意的是 - 我冒昧地升级你的触发器也包括UPDATE,因为更新是一个DELETE,后来加入了一个直接的INSERT。所以我想如果你更新一行并且QuoteNo(报价编号)改变了' 12345'到' 54321'你会想要在你的审计线索(你的" QuoteDetailsLog")。
[更新于30Aug2018]
CREATE TRIGGER [dbo].[trgcsms_QuoteDetail_DeleteLogs] ON [CSMS].[dbo].
[QuoteDetail]
AFTER DELETE, UPDATE
AS
BEGIN
INSERT INTO [dbo].[QuoteDetailDeleteLogs]
(
[QuoteNo]
,[SeqNo]
,[ItemCode]
,[Qty]
,[TotAmt]
)
SELECT [QuoteNo]
,[SeqNo]
,[ItemCode]
,[Qty]
,[TotAmt]
FROM DELETED
END
保持简短