Sql server 如何在多行上记录删除触发器后受影响的所有行
我有多行具有相同报价编号的表QuoteDetail。 可以使用批量删除“从QuoteDetail中删除,其中QuoteNo='12345' 如何使用after delete触发器记录所有已删除的行? 下面是我的触发器脚本,但只记录了1行,其余的被丢弃Sql server 如何在多行上记录删除触发器后受影响的所有行,sql-server,triggers,Sql Server,Triggers,我有多行具有相同报价编号的表QuoteDetail。 可以使用批量删除“从QuoteDetail中删除,其中QuoteNo='12345' 如何使用after delete触发器记录所有已删除的行? 下面是我的触发器脚本,但只记录了1行,其余的被丢弃 CREATE TRIGGER [dbo].[trgcsms_QuoteDetail_DeleteLogs] ON [CSMS].[dbo].[QuoteDetail] AFTER DELETE AS BEGIN SET NOCOU
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
你几乎成功了。只是不使用“@variables”,而是使用表。因为毕竟,您需要多行,对吗?这也被称为“一张桌子” 同样值得注意的是,我冒昧地升级了触发器,使其也包含了UPDATE,因为更新是一种删除,之后会立即插入。所以我想,如果你更新一行,并将QuoteNo(报价编号)从“12345”改为“54321”,你会希望在审计跟踪中看到它(你的“QuoteDetailsLog”) [2018年8月30日更新]
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
保持简短这里的问题是触发器只需要一行。不要给变量赋值(或
DECLARE
),只需将它们插入表中即可。@Larnu,这就像魔术一样!谢谢你的建议。那真是个好朋友!是的,我只是想直接加载到logs表,以确保如果有人想要恢复详细信息,我仍然有优势。非常感谢您的想法。无需将其插入临时表中。只需在已删除表的insert语句中选择它。