zoukankan      html  css  js  c++  java
  • 在编写触发器事件时如何获得当前插入记录的字段值?(MS SQL Server)

    在MS SQL Server中,我们可能会遇到这样的问题:

    在触发器中,需要把新插入记录中的某些字段值作为参数去操作另一些记录。

    举例:

    建一条消息的同时,追加给每个用户一个未读状态,每个用户都有自己的阅读状态。
    A消息表
    B用户表
    C状态表 
    我们在为A表追加记录的同时,需要为C表追加与B表用户数一样多的用户阅读状态表。


    解决这个问题,我们可以把它放在SQL服务器的触发器中,用行级触发器。需要用到以下知识:

    deleted 和 inserted 是逻辑(概念)表。这些表在结构上类似于定义触发器的表(也就是在其中尝试用户操作的表);这些表用于保存用户操作可能更改的行的旧值或新值。例如,若要检索 deleted 表中的所有值,请使用:
    SELECT * FROM deleted


    触发器代码:

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go

    ALTER TRIGGER [mys]
       ON  [dbo].[dt_Message]           --dt_Message是上面说的A表,在这里,为它指定行级触发
       AFTER INSERT
    AS
    BEGIN

        insert dt_MessageIsOpen (UserId,MessageId) select UserId,Inserted.MessageId from aspnet_Users,Inserted

        --被插入数据的MessageIsOpen是上面所说的C表,在这里,它被作为触发器触发之后的操作对象
        --作为数据源的有Inserted, aspnet_Users两个表,inserted 是逻辑(概念)表,在这里,它把A表中新插入记录中的MessageId作为数据源参数;aspnet_Users是上面提到的B表,它为C表提供UserId。

    END


    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    Docker镜像与仓库(四)
    Docker网络与存储(三)
    Docker基本使用(一)
    虚拟化KVM之优化(三)
    修改CENTOS7的网卡ens33修改为eth0
    虚拟化KVM之安装(二)
    虚拟化KVM之概述(一)
    Python不同版本打包程序为.exe文件
    JSON
    同源策略(same-origin policy)及三种跨域方法
  • 原文地址:https://www.cnblogs.com/Athrun/p/555862.html
Copyright © 2011-2022 走看看