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


    申明

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

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

  • 相关阅读:
    330. Patching Array--Avota
    334. Increasing Triplet Subsequence My Submissions Question--Avota
    C++前置++与后置++的区别与重载
    OpenGL光源位置
    深度探索va_start、va_arg、va_end
    C++类型转换
    2019-2020-2 20175216 《网络对抗技术》Exp9 Web安全基础
    2019-2020-2 20175216 《网络对抗技术》Exp8 Web基础
    2019-2020-2 20175216 《网络对抗技术》Exp7 网络欺诈防范
    2019-2020-2 20175216 《网络对抗技术》Exp6 MSF基础应用
  • 原文地址:https://www.cnblogs.com/Athrun/p/555862.html
Copyright © 2011-2022 走看看