触发器的创建

1.基于数据库的触发器

SQL语句:

CREATE TRIGGER databaseLog ON DATABASE
    FOR CREATE_TABLE, CREATE_PROCEDURE, CREATE_TRIGGER, ALTER_TABLE,
        ALTER_PROCEDURE, ALTER_TRIGGER, DROP_TABLE, DROP_PROCEDURE,
        DROP_TRIGGER
AS
    INSERT  INTO dbo.DatabaseLog
            ( ID ,
              DatabaseName ,
              ObjectName ,
              Operator ,
              OperateTime ,
              OperateType ,
              CommandText
            )
            SELECT  NEWID() ,
                    DB_NAME() ,
                    EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]',
                                      'sysname') ,
                    SYSTEM_USER ,
                    GETDATE() ,
                    EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]',
                                      'nvarchar(100)') ,
                    EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]',
                                      'nvarchar(max)');

  GO

效果:当数据库中增加、修改、删除数据表、存储过程、触发器时,会往dbo.DatabaseLog表中记录一条操作信息;

注意:EVENTDATA()是系统方法,返回当前有关服务器或数据库事件的信息,返回类型为xml.

2.基于指定数据表的触发器

SQL语句:

CREATE TRIGGER [dbo].[printInsertOrderName] ON [dbo].[Material_SO_PipeOrder]
    AFTER UPDATE
AS
    DECLARE @insertValue NVARCHAR(50);
    DECLARE @deleteValue NVARCHAR(50);
    SET @deleteValue = ( SELECT TOP 1
                                Deleted.OrderName
                         FROM   Deleted
                       );
    SET @insertValue = ( SELECT TOP 1
                                Inserted.OrderName
                         FROM   Inserted
                       );
    

    PRINT ( '修改前=' + @deleteValue + ';修改后=' + @insertValue );   

 GO

效果:dbo.Material_SO_PipeOrder数据表修改数据时,会打印出修改前的OrderName和修改之后的OrderName;

几个注意点:

(1).Inserted、Deleted都是表结构,记录了当前正在执行的操作中插入的数据和删除的数据。对于Update操作,没有对应的表记录,但可以从Deleted和Inserted中分别获取修改前和修改后的数据。

(2).FOR、AFTER、INSTEAD OF的区别

FOR跟AFTER一样,在Insert/delete/update操作之后(或同时)触发一些操作;

INSTEAD OF(根据书面意思,即替换)会替换当前的操作,不会执行Insert/delete/update操作,只执行触发器定义的操作

猜你喜欢

转载自blog.csdn.net/u013986317/article/details/80355189
今日推荐