Как регистрировать все затронутые строки после триггера удаления на нескольких строках - PullRequest
0 голосов
/ 04 июня 2018

У меня есть таблица 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

1 Ответ

0 голосов
/ 04 июня 2018

Вы почти поняли это правильно.Просто не используйте "@variables", а вместо этого используйте таблицы.Потому что, в конце концов, вы хотите несколько строк, верно?Это также известно как "стол".

Также стоит отметить - я позволил себе обновить ваш триггер, добавив в него также UPDATE, потому что обновление - это DELETE, к которому впоследствии присоединяется немедленная INSERT.Поэтому я полагаю, что если вы обновите строку и QuoteNo (номер цитаты) изменится с '12345' на '54321', вы захотите, чтобы это было в вашем журнале аудита (ваш "QuoteDetailsLog").

[обновлено 30 августа 2016]

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

коротко и просто

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...