zoukankan      html  css  js  c++  java
  • sql触发器

    添加,修改删除还是分开写好,我测试时候修改,删除里也有数据(DELETED),不在为啥

    先建立一张表,然后在copy一份

    USE [newsData]
    GO
    
    /****** Object:  Table [dbo].[op_weight_cemskind]    Script Date: 09/12/2020 17:05:50 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    SET ANSI_PADDING ON
    GO
    
    CREATE TABLE [dbo].[op_weight_cemskind](
        [id] [int] IDENTITY(1,1) NOT NULL,
        [cemskind] [varchar](30) NOT NULL,
        [icid] [int] NOT NULL,
        [isticket] [bit] NOT NULL,
        [isfuel] [bit] NOT NULL,
        [cinput] [varchar](30) NOT NULL,
        [ddate] [datetime] NOT NULL,
     CONSTRAINT [PK_op_weight_cemskind] PRIMARY KEY CLUSTERED 
    (
        [id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
    SET ANSI_PADDING OFF
    GO

    然后建立触发器,我修改的时候Inserteddeleted都有数据,不知道为啥

    USE [newsData]
    GO
    
    /****** Object:  Trigger [dbo].[copydata]    Script Date: 09/12/2020 17:08:05 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- =============================================
    -- Author:        <Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:    <Description,,>
    -- =============================================
    CREATE TRIGGER 触发器名称 ON 触发器所在的表名 
       AFTER INSERT,UPDATE,DELETE --触发的操作
    AS 
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
        -- Insert statements for trigger here
         IF EXISTS (SELECT 1 FROM Inserted)--判断添加修改Inserted是否有数据
          BEGIN
            IF NOT EXISTS(SELECT TOP 1 1 FROM dbo.op_weight_cemskindcopy WHERE id in(SELECT id FROM Inserted))--关联查询是否有数据,没有就是添加操作
             BEGIN
               INSERT INTO dbo.op_weight_cemskindcopy
                       ( id, 
                         cemskind ,
                         icid ,
                         isticket ,
                         isfuel ,
                         cinput ,
                         ddate
                       )
               SELECT    a.id,
                         a.cemskind ,
                         a.icid ,
                         a.isticket ,
                         a.isfuel ,
                         a.cinput ,
                         a.ddate
               FROM INSERTED a
             END
            ELSE --修改操作
             BEGIN
               UPDATE b
               SET b.cemskind=a.cemskind,
                   b.icid=a.icid ,
                   b.isticket=a.isticket ,
                   b.isfuel=a.isfuel ,
                   b.cinput=a.cinput ,
                   b.ddate=a.ddate
               FROM INSERTED a
               LEFT JOIN dbo.op_weight_cemskindcopy b  ON a.id=b.id
             END
          END
    
         ELSE IF EXISTS(SELECT 1 FROM DELETED)--删除操作
          BEGIN
            DELETE dbo.op_weight_cemskindcopy WHERE id in(SELECT id FROM deleted)
          END
        
    END
    
    GO
  • 相关阅读:
    圣诞树
    删除临时表并且插入数据
    sql语句中查询用in的时候,按in的顺序来输出
    xmlhelper and excelhelper
    几个小知识点。
    根据页面上记录数和页面大小获取总页数
    SQL语句的疑问
    katie melua the closest thing to crazy
    something about table
    little things
  • 原文地址:https://www.cnblogs.com/shuaimeng/p/13657679.html
Copyright © 2011-2022 走看看