相关疑难解决方法(0)

如何在INSERT INTO表(等)SELECT*FROM Table2期间触发每个插入行的触发器?

我一直试图避免在这种特殊情况下使用光标只是因为我不喜欢权衡,而我正在使用的过程恰好使得触发器看起来像是正确的行动方案.

存储过程根据复杂的子句混合插入记录,使用插入触发器向目标用户发送电子邮件,告诉他们访问站点.这很简单,工作正常.

但是,另一个过程是每晚运行并重新分发所有未查看的记录.我这样做的方式是根据分配时的日期字段上的选择进行另一次插入.以机智:

INSERT INTO Table (ID, User, AssignDate, LastActionDate)
    SELECT 
        ID
        ,User
        ,GETDATE() [AssignDate]
        ,GETDATE() [LastModifiedDate]
    FROM Table2
        /*snip*/
Run Code Online (Sandbox Code Playgroud)

触发器适用于单个插入,但上面的select语句仅适用于最后插入的行.有办法绕过这种行为吗?它毁了整个事情!

编辑(触发代码):

ALTER TRIGGER dbo.Notify
    ON  dbo.Table
    AFTER INSERT
AS 
BEGIN

    DECLARE @EmailSender varchar(50)='Sender Profile'
    DECLARE @Identity int
    DECLARE @User varchar(20)
    DECLARE @Subject varchar(50)

    SET @Identity=@@Identity

    SELECT @User=User, @Subject='(' + CONVERT(varchar,@Identity) + ')!'
    FROM Table
    WHERE
        idNum=@Identity

    exec msdb.dbo.sp_send_dbmail
        @profile_name=@EmailSender,
        @recipients=@User
        @subject=@Subject,
        @body='//etc'

END
Run Code Online (Sandbox Code Playgroud)

email triggers bulkinsert sql-server-2008

5
推荐指数
1
解决办法
6万
查看次数

修改 SQL 触发器以使用 BULK INSERT

我有一个不会触发的 SQL 触发器,因为表中的记录是通过 BULK INSERT 插入的。我无权访问插入记录的代码,因此我需要修改此触发器以处理 BULK INSERT。这是触发器:

    USE [testdata]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[Trigger_test] ON [dbo].[test]
    AFTER INSERT , UPDATE
AS 

BEGIN

    DECLARE @BatchId int, @Ethanol decimal(18,6), @Glucose decimal(18,6), @SampleAge varchar(50);

    SELECT @BatchId = CONVERT(int,bd.[BatchId]),
           @Ethanol = CONVERT(decimal(18,2),[Ethanol]), 
           @Glucose= CONVERT(decimal(18,2),[Glucose]), 
           @SampleAge = bd.SampleCode
    from INSERTED bd

    update [dbo].[DeSchedule] 
    SET 
            [Ethanol] = @Ethanol,
            [Glucose] = @Glucose,
            [SampleCompleted] = 1 
    WHERE [BatchID] = @BatchId AND [SampleAge] = @SampleAge
END
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我修改此触发器以处理 BULK INSERT。

sql sql-server

4
推荐指数
1
解决办法
9515
查看次数

标签 统计

bulkinsert ×1

email ×1

sql ×1

sql-server ×1

sql-server-2008 ×1

triggers ×1