【问题标题】:sql server trigger for insert用于插入的 sql server 触发器
【发布时间】:2013-04-10 08:15:08
【问题描述】:

我是 Sql Server 的新手,但我一直经常使用 Oracle。我看到 Sql Server 不支持某些功能。比方说,我想观察一个表的插入,以及插入到该表中的内容,我想将插入的同一行复制到另一个表中。

这是我的代码

Create TRIGGER Post_Trigger ON Posts For Insert
AS
INSERT INTO EmailQueueRaw (UserID,CreatedBy,EmailTypeId,EmailTablePrimaryKey)    VALUES('','Arif','1','1');
GO

在Oracle 中,我曾经使用过很棒的New 和Old 函数。但是我们在 Sql Server 中没有它,我不确定在这里做什么。请帮我如何将相同的数据复制到另一个表?

【问题讨论】:

    标签: sql-server database triggers


    【解决方案1】:

    您可以使用INSERTED(如果需要,还可以使用DELETED),但您需要注意它们是pseudo-tables,并且可以包含0、1或多行:

    Create TRIGGER Post_Trigger ON Posts For Insert
    AS
    INSERT INTO EmailQueueRaw (UserID,CreatedBy,EmailTypeId,EmailTablePrimaryKey)
    SELECT '',ColumnA,'1',ColumnB FROM inserted;
    GO
    

    【讨论】:

    • 怎么会有多行?如果情况是更新或删除语句,则可能有多行,但插入时没有。因为在插入时一次只插入一行,但更新和删除可能会影响多行。
    • @Borsel - 在一般中,INSERT 可以影响多行。所有版本的 SQL Server 语法都允许 INSERT ... SELECT (事实上,我在答案中的触发器中显示了一个)。 ANSI 标准语法允许在 VALUES 子句中使用多个元组,例如INSERT INTO Table(A,B) VALUES (1,2),(3,4) 自 2008 版 (IIRC) 起受支持。我相信,Oracle 长期以来一直支持 ANSI 标准语法。
    • @Borsel(实际上,经过进一步思考,我相信INSERT ... SELECT 也是标准允许的,它不是仅SQL Server 的构造)
    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多