SQL Server - 使用表触发器记录表插入,更新,删除行数

除了表触发器的基本知识,本篇还使用了一下知识点。

1.    如何使用sql获取当前session 用户名和机器名

Select CURRENT_USER,Host_name()

2.    如何在表触发器中获取当前表名称

SELECT OBJECT_SCHEMA_NAME( parent_id ) + ‘.‘ + OBJECT_NAME( parent_id )  FROM sys.triggers

触发器完整代码

ALTER TRIGGER dbo.DimTest_AdutitTriger
   ON  dbo.DimTest
   AFTER INSERT,DELETE,UPDATE
AS
BEGIN
                SET NOCOUNT ON;
                declare @tbName varchar(256)
                SELECT @tbName = ‘dbo.DimTest’
                DECLARE @action as varchar(20), @Count int = 0 ;
    SET @action = ‘INSERT‘; -- Set Action to Insert by default.

    IF EXISTS(SELECT * FROM DELETED)
    BEGIN
        SET @action =
            CASE
                WHEN EXISTS(SELECT * FROM INSERTED) THEN ‘UPDATE‘ -- Set Action to Updated.
                ELSE ‘DELETE‘ -- Set Action to Deleted.
            END
    END
    ELSE
        IF NOT EXISTS(SELECT * FROM INSERTED) RETURN; -- Nothing updated or inserted.
                IF ( @action = ‘INSERT‘ or @action =‘UPDATE‘)
                BEGIN
                                set @Count = (select count(*) from INSERTED)
                END
                IF  @action = ‘DELETE‘
                BEGIN
                                set @Count = (select count(*) from DELETED)
                END
                insert into dbo.AuditTable
                select getdate(),CURRENT_USER,Host_name(),null,@tbName,‘dim‘,@action,@Count
END
GO
时间: 2024-10-28 19:37:25

SQL Server - 使用表触发器记录表插入,更新,删除行数的相关文章

SQL Server:触发器详解

SQL Server:触发器详解 1. 概述 2. 触发器的分类 3. Inserted和Deleted表 4. 触发器的执行过程 5. 创建触发器 6. 修改触发器: 7. 删除触发器: 8. 查看数据库中已有触发器: 9. “Instead of”相关示例: 10. “After”触发器 11. 参考资源 1. 概述 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活. 所以触发器可以用来实现对表实施复杂的完整性约束. 2. 触发器的分类

Sql server 2008 触发器实现

昨天在进行系统升级中,对于某些程序生成的中间表数据的矫正的工作十分恼火.因现场采集设备和计量设备运行情况及变更情况不可控.常常造成因非程序因素(自定义名词,大概的意思就是因为现场采集设备断电.计量设备更换.系统基础通讯信息发生变更等一系列认为原因影响数据存储的准确性),影响后期的数据统计分析的准确性和有效性.不时被客户发现直接向市场部投诉说系统不稳定,要求现场排查问题.我擦!牢骚终止. 终究其问题主要是在生成中间表时,没有必要的验证.只是单纯的在某项操作中,添加的生成中间表的响应操作.后期当发现

sql server主动推送客户端更新数据

小谈需求: 最近工作上接到一个需求,做一个web展示数据的报表,最好能实时更新,不限制所用技术. 第一个问题:web服务器推送给浏览器新数据,一开始我想到的最快的最简单的方法就是 在web页面上js轮询了.因为我们的数据更新频率并不快. 后来觉得这种办法有点太土了. 或许长轮询更有效.  当然长轮询的技术很多了. java 的dwr,c#的 signalr.c#还可以同过异步请求来自己写长轮询. 遇到的第二个问题,就是数据库如何通知web服务器更新数据,下面便是sql server2008的推送

Oracle\MS SQL Server Update多表关联更新

原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表   一.MS    SQL    Server   多表关联更新      sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来.虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就

SQL Server 2012中快速插入批量数据的示例及疑惑

SQL Server 2008中SQL应用系列--目录索引 今天在做一个案例演示时,在SQL Server 2012中使用Insert语句插入1万条数据,结果遇到了一个奇怪的现象,现将过程分享出来,以供有兴趣的同学参考. 附:我的测试环境为:SQL Server 2012,命名实例 Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86) Feb 10 2012 19:13:17 Copyright (c) Microsoft Corporatio

SQL Server DDL 触发器(Trigger)-- 创建数据库级别的DDL触发器

SQL Server DDL 触发器(Trigger)-- 创建数据库级别的DDL触发器 以下针对某个数据库在创建数据表时调用触发器,并将创建该数据表的用户账户写入到Windows的Event Log中. CREATE TRIGGER reminder ON DATABASE FOR CREATE_TABLE AS DECLARE @str NVARCHAR(100) SET @str=suser_sname() + N'create a new table' RAISERROR(@str,10

SQL Server DDL 触发器(Trigger)-- 创建服务器级别的DDL触发器

SQL Server DDL 触发器(Trigger)-- 创建服务器级别的DDL触发器 若是创建服务器级别的DDL触发器,只要把先前的ON DATABASE改为ON ALL SERVER,即可跟踪服务器级别的事件,使用的原理与数据库级别的DDL触发器相似,区别只在跟踪的事件不同. CREATE TRIGGER ddl_trig_login ON ALL SERVER FOR DDL_LOGIN_EVENTS AS PRINT n'ALTER LOGIN EVENT' SELECT EVENTD

SQL Server DDL 触发器(Trigger)-- 介绍

SQL Server DDL 触发器(Trigger)-- 介绍 触发器(Trigger)以往仅用在特定的对象上,如数据表.当数据维护语言(DML)的Insert.Delete.Update语法针对这些对象工作时,由系统自动调用对应的触发器,而在SQL Server 2000中增加了Instead of Trigger,通过触发器来取代原本要执行的添加.修改.删除语法,且可以设置在视图上.由于Instead of Trigger是在DML语法真的改变数据写入事务日志之前触发,因此,也称为Befo

Sql server 大数据量插入速度慢或丢失数据解决办法

问题描述:我的设备每秒2000条数据插入数据库,2个设备总共4000条,当在程序里面直接用insert语句插入时,两个设备同时插入大概总共能插入约2800条左右,数据丢失约1200条左右,找了好多解决方法,整理了两种效果比较明显的解决办法: 第一种:使用Sql Server函数: 1.将数据组合成字串,使用函数将数据插入内存表,后将内存表数据复制到要插入的表. 2.组合成的字符换格式:'111|222|333|456,7894,7458|0|1|2014-01-01 12:15:16;1111|