SqlServer实现类似Oracle的before触发器示例

1. 插入数据前判断数据是否存在

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
alter TRIGGER CategoryExistTrigger
ON ProductCategory
instead of insert
AS 

declare @categoryName varchar(50);
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON; 

-- Insert statements for trigger here
select @categoryName = CategoryName from inserted;
if exists(select * from ProductCategory where CategoryName =@categoryName)
begin
print 'Category exists..'
end;
else
begin
insert into ProductCategory select * from inserted;
end; 

END

2. 删除表中数据时需要先删除外键表的数据

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
alter TRIGGER DeleteOrderTrigger
ON OrderHeader
instead of delete
AS
declare @OrderId varchar(50);
BEGIN 

SET NOCOUNT ON;
select @OrderId = OrderId from deleted;
delete from OrderLine where OrderId = @OrderId; 

END
GO
(0)

相关推荐

  • oracle监控某表变动触发器例子(监控增,删,改)

    使用oracle触发器 实现对某个表的增改删的监控操作,并记录到另一个表中. 代码: 复制代码 代码如下: create or replace trigger test_trigger    before insert or update or delete on test_table    for each row  declare    v_id        varchar2(30);    v_bdlb      varchar2(1);    v_jgdm      VARCHAR2(

  • Oracle创建主键自增表(sql语句实现)及触发器应用

    1.创建表 复制代码 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprimarykey,/*主键,自动增加*/ usernamevarchar2(20) ); 2.创建自动增长序列 复制代码 代码如下: CREATESEQUENCETestIncrease_Sequence INCREMENTBY1--每次加几个 STARTWITH1--从1开始计数 NOMAXVALUE--不设置最大值,设置最大值:maxvalue9999 NO

  • Oracle触发器用法实例详解

    本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需要说明一下,触发器可以分为语句级触发器和行级触发器.详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发.而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次. 具体举例: 1.

  • Oracle 触发器的使用小结

    --建递增序列 CREATE SEQUENCE LZEAM_SP_LOOP_EQ_SEQ MINVALUE 1 INCREMENT BY 1 START WITH 1 测试: SELECT LZEAM_SP_LOOP_EQ_SEQ.NEXTVAL FROM DUAL --建触发器 CREATE OR REPLACE TRIGGER LZEAM.LZEAM_SP_LOOP_EQ_TRIGGER BEFORE INSERT ON SP_LOOP_EQ FOR EACH ROW BEGIN SELEC

  • oracle 触发器 学习笔记

    功能: 1. 允许/限制对表的修改 2. 自动生成派生列,比如自增字段 3. 强制数据一致性 4. 提供审计和日志记录 5. 防止无效的事务处理 6. 启用复杂的业务逻辑 开始 create trigger biufer_employees_department_id before insert or update of department_id on employees referencing old as old_value new as new_value for each row wh

  • Oracle触发器实例代码

    Oracle触发器,用于选单后修改选单的表的触发动作. --备货检验选单后 回写备货状态 CREATE OR REPLACE TRIGGER tri_TobaccoStockINSERT after INSERT ON "TobaccoStockQuality" FOR each ROW BEGIN UPDATE "GoodsStock" SET "FirstCheckState"=-1 WHERE "ID"=:NEW.&qu

  • oracle 存储过程和触发器复制数据

    一.存储过程的创建和使用 1.创建程序包,并在程序中创建存储过程 create or replace PACKAGE NCS_ICP_TJ AS /*lfx@ncs-cyber.com.cn*/ /* TODO 在此输入程序包声明 (类型, 异常错误, 方法等) */ /*根据备案主体ID拷贝通过表备案数据到备案临时表,拷贝5张*/ PROCEDURE ICP_PASS_TO_TEMP( v_main_id IN icp_gn_temp_baxx_zt.ztid%TYPE, v_lyd IN i

  • SqlServer实现类似Oracle的before触发器示例

    1. 插入数据前判断数据是否存在 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- =============================

  • Oracle中触发器示例详解

    前言 在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 触发器类型 触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行.即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接收参数.所以运行触发器就叫触发或点火(firing).ORACLE事件指的是对数据库的表进行的INSERT.UPDATE及DELETE操作或对视图进行类似的操作.ORACLE将触发器的功能扩展到了触

  • 详解oracle中通过触发器记录每个语句影响总行数

    详解oracle中通过触发器记录每个语句影响总行数 需求产生: 业务系统中,有一步"抽数"流程,就是把一些数据从其它服务器同步到本库的目标表.这个过程有可能 多人同时抽数,互相影响.有测试人员反应,原来抽过的数,偶尔就无缘无故的找不到了,有时又会出来重复行.这个问题产生肯定是抽数逻辑问题以及并行的问题了!但他们提了一个简单的需求:想知道什么时候数据被删除了,什么时候插入了,我需要监控"表的每一次变更"! 技术选择: 第一就想到触发器,这样能在不涉及业务系统的代码情况

  • python实现与Oracle数据库交互操作示例

    目录 1.安装准备 2.instantclient的安装说明 3.instantclient安装步骤 4.还有几个需要注意的地方 1)设置NLS_LANG环境变量:解决中文乱码 2)关于TNS_ADMIN环境变量的说明 3)关于python中,cx_Oracle驱动包的安装 5.python操作Oracle数据库 1)python连接数据库的3种方式 2)查询数据-查 1.安装准备 ① 正确安装好Oracle数据库(我的电脑是64位的,但是我最开始安装的是Oracle32.因此,你要是有64位的

  • 浅谈mysql可有类似oracle的nvl的函数

    要用ifnull,而不是isnull isnull是判断是否为null,返回值是1表示null或者0表示不为空 ifnull等同于oracle的nvl,用法如下 mysql> select ifnull(1,10); +--------------+ | ifnull(1,10) | +--------------+ |            1 | +--------------+ 1 row in set (0.00 sec) mysql> select ifnull(null,10);

  • MySQL中实现插入或更新操作(类似Oracle的merge语句)

    如果需要在MySQL中实现记录不存在则insert,不存在则update操作.可以使用以下语句: 更新一个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,1,columnA) 更新多个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KE

  • MySQL实现类似Oracle序列的方案

    MySQL实现类似Oracle的序列 Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的: 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长.开始索引.是否循环等:若需要迁移数据库,则对于主键这块,也是个头大的问题. 本文记录了一个模拟Oracle序列的方案,重点是想法,代码其次. Oracle序列的使用,无非是使用.nextval和.currval伪列,基本想法是: 1.MySQL中新建表,用于存储序

  • sqlserver主键自增的实现示例

    建表,主键自增 create table aaa( id bigint identity(1,1) not null PRIMARY key, name nvarchar(255) ); navicat没办法给主键列,加identity,只能用sql建表 赋值时,identity列不能赋值,报错 一.identity的基本用法 1.含义 identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错 2.语法 列名 数据类型

  • Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例

    问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(trigger)和序列(sequence)来模式实现. 示例: 1.建立表 复制代码 代码如下: create table user  (       id   number(6) not null,       name   varchar2(30)   not null primary key  )

  • [Oracle] 如何使用触发器实现IP限制用户登录

    下面是一个触发器的例子: 复制代码 代码如下: create or replace trigger logon_ip_controlafter logon on databasedeclare  ip STRING(30);  user STRING(30);beginSELECT SYS_CONTEXT('USERENV','SESSION_USER') into user from dual;SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') into ip

随机推荐