sql - 需要一些有关 Sql Server 和简单触发器的帮助

标签 sql sql-server-2008 triggers

我希望触发一个触发器,但我不确定如何获取导致触发的数据。

我有一个简单的 table 。

FooId INT PK NOT NULL IDENTITY
Name VARCHAR(100) NOT NULL

我希望有一个触发器,以便当发生更新、插入或删除时,我会执行以下操作。

伪代码

IF INSERT
    Print 'Insert' & Name
ELSE IF UPDATE
    Print 'Update' & FooId & Name
ELSE IF DELETE
    Print 'Delete' & FooId & Name

现在,我知道如何为表创建触发器。 我不知道该怎么做是根据触发器类型找出值。

有人可以帮忙吗?

编辑:不确定是否有帮助,但数据库是 Sql Server 2008

最佳答案

伪表“inserted”包含新数据,“deleted”表包含旧数据。

你可以做类似的事情

create trigger mytrigger on mytable for insert, update, delete
as
    if ( select count(*) from inserted ) > 0
        -- insert or update
        select FooId, Name from inserted
    else
        -- delete
        select FooId, Name from deleted

为了澄清其他人发表的所有评论,在插入时,inserted 表包含数据,deleted 为空。删除时,情况相反。更新时,删除插入包含任何更新行的“之前”和“之后”副本。

关于sql - 需要一些有关 Sql Server 和简单触发器的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/937468/

相关文章:

mysql - 无限循环更新? MySQL触发器

mysql - 查询以根据 mysql 中每个项目的角色隔离用户

sql-server - 防止批量插入时锁定整个表

sql-server - 在SQL Server中查找一周的第一天,第二天等

triggers - Salesforce:检查 ApexTrigger 在测试方法中是否处于事件状态

mysql触发器,OLD和NEW之间的文本

java - SQL 进程遗留?

mysql - INPUT INTO 错误 - 初学者 MYSQL 语法问题

python - 在 python 中运行的 Sqlite Case 语句

sql - 在SQL Server 2008中更改存储过程的名称