SQLServer创建触发器,更新表

 在SQLServer,触发器,插入、更新、删除状态:

CREATE TRIGGER t_inms_alarms

  ON [PHS].[dbo].[AlarmCurrent]

  FOR INSERT, DELETE

  AS

  DECLARE @rows int

  SELECT @rows = @@rowcount

  IF @rows = 0

  return

  --如果表是插入,则同步更新AlarmsMiddleTbl

  IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)

  BEGIN

  INSERT INTO [PHS].[dbo].[AlarmsMiddleTbl]

  SELECT i.[Id], i.[SequenceId], i.[code], i.[alarmdefineid],

  CONVERT(varchar,i.[occurTime],120), i.[confirmation], i.[ConfirmationTime],

  i.[MaintenanceName], i.[MaintenanceProcedure],

  i.[ClearTime], i.[screen],CONVERT(varchar, getdate(), 120)

  FROM inserted i

  END

  --如果表是更新某个字段,则同步更新AlarmsMiddleTbl

  IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted) AND

  UPDATE(ConfirmationTime)

  BEGIN

  INSERT INTO [PHS].[dbo].[AlarmsMiddleTbl]

  SELECT d.[Id], d.[SequenceId], d.[code], d.[alarmdefineid],

  CONVERT(varchar,d.[occurTime],120), d.[confirmation], d.[ConfirmationTime],

  d.[MaintenanceName], d.[MaintenanceProcedure],

  CONVERT(varchar, getdate(),120), d.[screen],CONVERT(varchar, getdate(), 120)

  from deleted d

  END

  --如果表是删除,则同步更新AlarmsMiddleTbl

  IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)

  BEGIN

  INSERT INTO [PHS].[dbo].[AlarmsMiddleTbl]

  SELECT d.[Id], d.[SequenceId], d.[code], d.[alarmdefineid],

  CONVERT(varchar,d.[occurTime],120), d.[confirmation], d.[ConfirmationTime],

  d.[MaintenanceName], d.[MaintenanceProcedure],

  CONVERT(varchar, getdate(),120), d.[screen],CONVERT(varchar, getdate(), 120)

  from deleted d

  END

  IF @@error <> 0

  BEGIN

  RAISERROR(‘ERROR‘,16,1)

  rollback transaction

  return

  END

时间: 2024-11-01 17:10:56

SQLServer创建触发器,更新表的相关文章

lock(1)——创建及更新表过程中SQL SERVER锁资源分配情况

锁应该说是由关系型数据库ACID(Atomicity,Consistency,Isolation,Durability)特性而引出的. 以下将测试在创建及更新表过程中SQL Server锁资源分配情况 获取当前会话的事务隔离级别:DBCC USEROPTIONS 测试环境:SQL SERVER 2008 R2 read committed隔离级别下 创建表 当我们只是打开一个SSMS查询窗口,选择数据库为master和tempdb时,没有任何锁产生,当我选择其他数据库,sql server就会在

PostgreSQL权限管理之创建可更新表的普通用户

一.环境 $ psql --version psql (PostgreSQL) 9.4.4 我们都知道,超级用户的权限太大了,为了数据库的安全,对于非管理员账号,需要创建普通用户. 二.语法 $ psql  psql (9.4.4) Type "help" for help. postgres=# \h create role  Command:     CREATE ROLE Description: define a new database role Syntax: CREATE

创建触发器在表中播入数据时ID自动增长

create table ttt (id number primary key ,name varchar2(20),age number(2)) create or replace trigger gger_tt before insert on ttt for each row when (new.id is null) begin select ttt_sequence.nextval into :new.id from dual; end;

SQL Server 创建触发器(trigger)

触发器简介: 触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手动执行,而是由事件来触发.触发器是当对某一个表进行操作.例如:update.insert.delete这些操作的时候,系统会自动调用执行该表上对应的触发器. 触发器分类: 1.DML( 数据操纵语言 Data Manipulation Language)触发器:是指触发器在数据库中发生 DML 事件时将启用.DML事件是指在表或视图中对数据进行的 insert.update.delete 操作的语句. 2.DDL(数据定义

第十二章——SQLServer统计信息(1)——创建和更新统计信息

原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索引供查询之用,因为SQLServer优化器是基于开销的优化.当在where和on上的列上的数据需要显示在结果集的时候,如果有实时的统计信息,优化器会选择最好的执行方式,因为优化器会从统计信息中获得这些数据的明细情况. 在创建索引的时候,SQLServer就会在索引列上创建统计信息.简单来说,统计信息

SQLserver 2008同步复制创建后新增表/函数/存储过程(不重新初始化快照)

SQLserver 2008同步复制创建后新增表/函数/存储过程(不重新初始化快照) 一.在生产环境中已有事务复制中(复制类型为事务发布),需要对已有发布的数据库新增表.视图.存储过程等,这些变更是不会同步到从库中.如必须应用到从库,有以下两种方法: 1.如果采用默认的设置,每次都需要重新初始化快照,从库重新应用快照和未执行的同步命令,这在生产环境中对数据库压力或性能或DBA可维护性表现的很差. 2.将新增的架构变更新建一个新的发布订阅,但会造成维护困难,增加出错的几率. 3.可以通过设置imm

Oracle、Mysql、SqlServer创建表和给表和字段加注释

一.Oracle --创建表 create table test ( id varchar2(200) primary key not null, sort number, name varchar(200) ) --字段加注释 comment on column test.id is 'id'; comment on column test.sort is '序号'; --表加注释 comment on table test is '测试表'  二.Mysql --创建表 create tab

MySQL创建表,更新表

创建表 mysql> create table 表名( -> 列名 数据类型 是否为空 auto_increment, -> 列名 数据类型 是否为空... -> ... -> 列名 数据类型 是否为空... default 值, -> primary key(列名1,列名2...))engine=myisam; 可以用last_insert_id()获取最后一个auto_increment的值 允许使用NULL值的列可以在插入行时不给出该列值,NULL值就是没有值,不

SQLServer 2014 内存优化表

内存优化表是 SQLServer 2014 的新功能,它是可以将表放在内存中,这会明显提升DML性能.关于内存优化表,更多可参考两位大侠的文章:SQL Server 2014新特性探秘(1)-内存数据库 试试SQLSERVER2014的内存优化表 创建内存优化表也很简单,以下测试: 添加内存优化数据库文件组:[sql] view plain copy 在CODE上查看代码片派生到我的代码片USE [master] GO -- 在当前数据库中添加内存优化数据库文件组(每个数据库仅1个文件组) AL