• sqlserver的触发器练习实例


    https://www.cnblogs.com/julinhuitianxia/p/6823011.html

    https://www.cnblogs.com/xinlj/p/5138974.html

    触发器要实现的功能:

    (1)获取对表Table1数据操作操作类型(insert、delete或update)。

    (2)将表修改后的数据保存到表Table2(该表结构与Table1表结构类似)。

    例如:

    1>向表Table1添加数据1,表保存后,将数据1添加到表Table2,并将操作类型:insert,保存到表Table2的ChangeType列。

    2>修改表Table1,将数据1改成数据2,表保存后,将数据2添加到表Table2,并将操作类型:update,保存到表Table2的ChangeType列。

    3>删除表Table1数据1,表保存后,将数据2添加到表Table2,并将操作类型:delete,保存到表Table2的ChangeType列。

    表结构:

    (1)表Table1

    CREATE TABLE Table1(
        [ID] [BIGINT] IDENTITY(1,1) NOT NULL,
        [Name] [NVARCHAR](20) NULL,
        [Sex] [NVARCHAR](2) NULL,
        [Address] [NVARCHAR](50) NULL,
        [Age] [INT] NULL,
        [Birthday] [DATE] NULL
    ) ON [PRIMARY]

    (2)表Table2

    CREATE TABLE Table2(
         [ID] [BIGINT] NOT NULL,
         [Name] [NVARCHAR](20) NULL,
         [Sex] [NVARCHAR](2) NULL,
         [Address] [NVARCHAR](50) NULL,
         [Age] [INT] NULL,
         [Birthday] [DATE] NULL,
         [ChangeType] [NVARCHAR](50) NOT NULL
     ) ON [PRIMARY]

    触发器Tri_Table1

    CREATE  TRIGGER [Triger_Table1] ON [Table1]
        --After触发器,对表进行insert、delete、update后触发
        AFTER INSERT, DELETE, UPDATE 
    AS
        BEGIN
            BEGIN TRY
                BEGIN TRAN;
                DECLARE @maxID NVARCHAR(50) ,
                    @inserted INT ,
                    @deleted INT ,
                    @ChangeType NVARCHAR(20);
                SELECT  @inserted = COUNT(1)
                FROM    Inserted;
                SELECT  @deleted = COUNT(1)
                FROM    Deleted;
                --判断对表Table1的操作类型
                IF @inserted > 0
                    AND @deleted = 0
                    BEGIN 
                        SET @ChangeType = 'INSERT';
                    END;
                ELSE
                    IF @inserted > 0
                        AND @deleted > 0
                        BEGIN 
                            SET @ChangeType = 'UPDATE';
                        END;
                    ELSE
                        IF @inserted = 0
                            AND @deleted > 0
                            BEGIN 
                                SET @ChangeType = 'DELETE';
                            END;
                IF @ChangeType = 'DELETE'
                    BEGIN
                        SELECT  @maxID = ID
                        FROM    Deleted;
                        --如果对Table1同一条数据,进行多次操作,则Table2只保存最新数据    
                        IF EXISTS ( SELECT  COUNT(1)
                                    FROM    Table2
                                    WHERE   ID = @maxID )
                            BEGIN 
                                DELETE  FROM Table2
                                WHERE   ID = @maxID;    
                            END;
                        INSERT  INTO Table2
                                ( 
                                                                    ID,
                                    Name,
                                    Sex,
                                    Address,
                                    Age,
                                    Birthday,
                                    ChangeType
                                )
                                SELECT  ID,
                                        Name,
                                        Sex,
                                        Address,
                                        Age,
                                        Birthday,
                                        @ChangeType AS ChangeType   
                                FROM    Deleted;
                    END;
                 ELSE
                    BEGIN
                        SELECT  @maxID = ID
                        FROM    Inserted;    
                        IF EXISTS ( SELECT  COUNT(1)
                                    FROM    Table2
                                    WHERE   ID = @maxID )
                            BEGIN 
                                DELETE  FROM Table2
                                WHERE   ID = @maxID;    
                            END;
                        INSERT  INTO Table2
                                ( 
                                    ID,
                                    Name,
                                    Sex,
                                    Address,
                                    Age,
                                    Birthday,
                                    ChangeType
                                )
                                SELECT  ID,
                                        Name,
                                        Sex,
                                        Address,
                                        Age,
                                        Birthday,
                                        @ChangeType AS ChangeType                           
                                FROM    Inserted 
                    END;   
                COMMIT TRAN;
            END TRY
            BEGIN CATCH
                IF XACT_STATE() = -1
                    ROLLBACK TRAN;
            END CATCH;  
        END;

    下面是只有新增和修改的

    CREATE TABLE Table1(
        [ID] [BIGINT] IDENTITY(1,1) NOT NULL,
        [Name] [NVARCHAR](20) NULL,
        [Sex] [NVARCHAR](2) NULL,
        [Address] [NVARCHAR](50) NULL,
        [Age] [INT] NULL,
        [Birthday] [DATE] NULL
    ) ON [PRIMARY]
    CREATE TABLE Table2(
         [ID] [BIGINT] IDENTITY(1,1) NOT NULL,
         [Name] [NVARCHAR](20) NULL,
         [Sex] [NVARCHAR](2) NULL,
         [Address] [NVARCHAR](50) NULL,
         [Age] [INT] NULL,
         [Birthday] [DATE] NULL,
         [ChangeType] [NVARCHAR](50) NOT NULL
     ) ON [PRIMARY]
    CREATE  TRIGGER [Triger_Table1] ON [Table1]
        --After触发器,对表进行insert、delete、update后触发
        AFTER INSERT, UPDATE 
    AS
        BEGIN
            BEGIN TRY
                BEGIN TRAN;
                DECLARE @maxID NVARCHAR(50) ,
                    @inserted INT ,
                    @deleted INT ,
                    @ChangeType NVARCHAR(20);
                SELECT  @inserted = COUNT(1)
                FROM    Inserted;
                SELECT  @deleted = COUNT(1)
                FROM    Deleted;
                --判断对表Table1的操作类型
                IF @inserted > 0
                    AND @deleted = 0
                    BEGIN 
                        SET @ChangeType = 'INSERT';
                    END;
                ELSE
                    IF @inserted > 0
                        AND @deleted > 0
                        BEGIN 
                            SET @ChangeType = 'UPDATE';
                        END;          
    
                    BEGIN                         
                        INSERT  INTO Table2
                                ( 
                                   
                                    Name,
                                    Sex,
                                    Address,
                                    Age,
                                    Birthday,
                                    ChangeType
                                )
                                SELECT  
                                        Name,
                                        Sex,
                                        Address,
                                        Age,
                                        Birthday,
                                        @ChangeType AS ChangeType                           
                                FROM    Inserted 
                    END;   
                COMMIT TRAN;
            END TRY
            BEGIN CATCH
                IF XACT_STATE() = -1
                    ROLLBACK TRAN;
            END CATCH;  
        END;
  • 相关阅读:
    IHE 官方网址有用资源介绍
    HL7 标准及实现指南 必看的网址
    HL7及PIX相关的测试工具
    hl7 v2.X 版本中RSP_K23消息的构造
    hl7中V2版本的ACK消息的构造
    hl7消息中和时间有关的字段的格式
    解决方案: the selected file is a solution file but was created by a newer version of this application and cannot be opened
    wpf中为DataGrid添加checkbox支持多选全选
    hl7 V2中Message Control ID的含义及应用
    Pix mesa 自动化测试
  • 原文地址:https://www.cnblogs.com/feifeicui/p/8868595.html
Copyright © 2020-2023  润新知