精华内容
下载资源
问答
  • SQL Server 存储过程和触发器sql语句练习
    --1.查找18岁以上姓张的年龄最大的前20%
    select top 20 percent * from stu
    where 年龄>18 and 姓名 like '张_'
    go
    
    
    --2.创建存储过程,在stu表中性别那一列插入“男”或“女”时,在表中记录的是“1”或“0”
    create procedure stu_insert  @num int,@name char(5),@sex char(6)
    as 
    	if @sex='男'
    	insert into stu values(@num,@name,1,null)
    	else
    	if @sex='女'
    	insert into stu values(@num,@name,0,null)
    go
    
    exec stu_insert 7,'赵四',男
    go
    
    --3.创建存储过程,输入学号,输出性别(显示的是“男”或“女”)
    create proc stu_out @num int,@sex char(6) output
    as
    	declare @se bit
    	set @se=(select 性别 from stu where 学号=@num)
    	if @se=1
    	set @sex='男'
    	else if @se=0
    	set @sex='女' 
    go
    
    declare @sex char(6)
    exec stu_out 2 ,@sex output
    select @sex;
    go
    
    --新建一个表,在表中创建一个触发器,每次插入操作时,变量@str值会显示。
    create table table1(a int)
    go
    
    create trigger table1_insert on table1 after insert
    as
    	declare @str char(50)
    	set @str='trigger is working'
    	print @str
    go
    
    insert into table1 values(1)
    select * from table1
    
    --instead of触发器触发时只执行触发器内部的sql语句,而不执行激活该触发器的sql语句。
    create table table2(a int)
    go
    
    create trigger table2_insert on table2 instead of insert
    as
    	print 'instead of trigger is working'
    go
    
    insert into table2 values(1)
    select * from table2
    
    select * from cjb
    select * from kcb
    select * from xsb
    go
    
    --创建触发器,当向成绩表中插入一个学生的成绩时,将学生表中该学生的总学分加上添加的课程分数
    create trigger cjb_insert on cjb after insert
    as
    	declare @num char(6),@kc_num char(3),@xf int
    	select @num=学号,@kc_num=课程号 from inserted
    	select @xf=学分 from kcb where 课程号=@kc_num
    	update xsb set 总学分=总学分+@xf where 学号=@num
    	print '修改成功'
    go
    

    注意事项:

    1、理解存储过程中的输入参数和输出参数。

    2、定义参数的类型

    展开全文
  • SQL创建触发器:如何将两张表的数据同步更新
  • 触发器创建sql语句

    2011-07-06 11:36:42
    前后触发器创建语句使用sql语句创建触发器
  • sql server 创建触发器语句格式

    千次阅读 2010-09-30 18:00:00
     创建触发器的语法很长,简化为: 引用:CREATE TRIGGER 触发器名 ON 表名/视图名 { FOR | AFTER | INSTEAD OF } { [DELETE] [,] [INSERT] [,] [UPDATE] } AS  触发器内容(SQL 语句)...

     创建触发器的语法很长,简化为:

    引用:
    CREATE TRIGGER 触发器名 ON 表名/视图名
    { FOR | AFTER | INSTEAD OF } { [ DELETE] [,] [ INSERT] [,] [ UPDATE] }
    AS
      触发器内容(SQL 语句)



    引用:
    SQL SERVER 联机丛书的描述:
    AFTER
      指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。
      如果仅指定 FOR 关键字,则 AFTER 是默认设置。
      不能在视图上定义 AFTER 触发器。

    INSTEAD OF
      指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。
      在表或视图上,每个 INSERT、UPDATE 或 DELETE 语句最多可以定义一个 INSTEAD OF 触发器。然而,可以在每个具有 INSTEAD OF 触发器的视图上定义视图。
      INSTEAD OF 触发器不能在 WITH CHECK OPTION 的可更新视图上定义。如果向指定了 WITH CHECK OPTION 选项的可更新视图添加 INSTEAD OF 触发器,SQL Server 将产生一个错误。用户必须用 ALTER VIEW 删除该选项后才能定义 INSTEAD OF 触发器。

    { [DELETE] [,] [INSERT] [,] [UPDATE] }
      是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用以任意顺序组合的这些关键字。如果指定的选项多于一个,需用逗号分隔这些选项。
      对于 INSTEAD OF 触发器,不允许在具有 ON DELETE 级联操作引用关系的表上使用 DELETE 选项。同样,也不允许在具有 ON UPDATE 级联操作引用关系的表上使用 UPDATE 选项。
    展开全文
  • 创建SqlServer数据库触发器脚本范例,方便大家用sql创建触发器,学习sqlserver的朋友可以参考下。
  • 获取触发器 参考前面标准写法修改TRIGGER CREATE OR REPLACE TRIGGER "QRPAY"."BANK_CARD_ID_TRG" before insert on bank_card for each row declare -- local variables here begin select bank_card_id...

    今天在生产上准备把新表加入到库中,运维在建表等反面给了一些案例和建议和大家共勉


    1 标准TIGGER写法参考如下
    
    
      CREATE OR REPLACE TRIGGER "QRPAY"."APP_INFO_ID_TRG" BEFORE INSERT OR UPDATE ON  app_info
    FOR EACH ROW
    DECLARE
    v_newVal NUMBER(12) := 0;
    v_incval NUMBER(12) := 0;
    BEGIN
      IF INSERTING AND :new.id IS NULL THEN
        SELECT   app_info_id_seq.NEXTVAL INTO v_newVal FROM DUAL;
        -- If this is the first time this table have been inserted into (sequence == 1)
        IF v_newVal = 1 THEN
          --get the max indentity value from the table
          SELECT NVL(max(id),0) INTO v_newVal FROM  app_info;
          v_newVal := v_newVal + 1;
          --set the sequence to that value
          LOOP
               EXIT WHEN v_incval>=v_newVal;
               SELECT  app_info_id_seq.nextval INTO v_incval FROM dual;
          END LOOP;
        END IF;
        --used to emulate LAST_INSERT_ID()
        --mysql_utilities.identity := v_newVal;
       -- assign the value from the sequence to emulate the identity column
       :new.id := v_newVal;
      END IF;
    END;
    
    ALTER TRIGGER "QRPAY"."APP_INFO_ID_TRG" ENABLE
    
    
    select dbms_metadata.get_ddl('TABLE','BANK_CARD') from dual;
    
    少主健
    
      CREATE TABLE "QRPAY"."BANK_CARD" 
       (	"ID" NUMBER(10,0) NOT NULL ENABLE, 
    	"ACCOUNT_NO" VARCHAR2(21 CHAR), 
    	"ACCOUNT_NAME" VARCHAR2(20 CHAR), 
    	"ID_NUMBER" VARCHAR2(20 CHAR), 
    	"MERCHANT_NO" VARCHAR2(30 CHAR), 
    	"STATUS" VARCHAR2(2 CHAR), 
    	"RESERVED_PHONE" VARCHAR2(12 CHAR), 
    	"CREATE_TIME" DATE, 
    	"CARD_TYPE" VARCHAR2(10 CHAR), 
    	"BANK_NAME" VARCHAR2(10 CHAR)
       ) SEGMENT CREATION IMMEDIATE 
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
     NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "QRPAY" 
    --BANK_CARD_ID_SEQ
    --BANK_CARD_ID_TRG
    
    
    select dbms_metadata.get_ddl('SEQUENCE','BANK_CARD_ID_SEQ') from dual;  获取序列
    
       CREATE SEQUENCE  "QRPAY"."BANK_CARD_ID_SEQ"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 ORDER  NOCYCLE 
    
    select dbms_metadata.get_ddl('TRIGGER','BANK_CARD_ID_TRG') from dual;  获取触发器
    
    参考前面标准写法修改TRIGGER
    
      CREATE OR REPLACE TRIGGER "QRPAY"."BANK_CARD_ID_TRG" 
      before insert
      on bank_card 
      for each row
    declare
      -- local variables here
    begin
       select bank_card_id_seq.nextval into:New.id from dual;
    end bank_card_id_trg;
    
    ALTER TRIGGER "QRPAY"."BANK_CARD_ID_TRG" ENABLE
    
    


    展开全文
  • 您可能感兴趣的文章:SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法SQL Server触发器及触发器中的事务学习SQL Server 触发器 表的特定字段更新时,触发Update触发器SQLServer触发器创建、删除、...
  • SQL触发器 常用语句

    2018-12-05 12:09:16
    SQL触发器 常用语句 一、创建一个简单的触发器 CREATE TRIGGER 触发器名称 ON 表名 FOR INSERT、UPDATE 或 DELETE AS  T-SQL 语句 注意:触发器名称是不加引号的。   二、删除触发器 drop trigger ...
    
    

    随笔- 689  文章- 3  评论- 24 

    SQL触发器 常用语句

    一、创建一个简单的触发器

    CREATE TRIGGER 触发器名称

    ON 表名

    FOR INSERT、UPDATE 或 DELETE

    AS

        T-SQL 语句

    注意:触发器名称是不加引号的。

     

    二、删除触发器

    drop trigger 触发器名称

    删除多个触发器:drop trigger 触发器名称,触发器名称

     

    三、重命名触发器

    用查询分析器重命名

    exec sp_rename 原名称, 新名称

    sp_rename 是 SQL Server? 自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名、列表、索引名等。

     

    四、INSERT、UPDATE 或 DELETE

     

    INSTEAD OF

    执行触发器语句,但不执行触发触发器的 SQL 语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行 delete 语句。例:

    create trigger f

    on tbl

    instead of delete

    as

        insert into Logs...

     

    IF UPDATE(列名)

    检查是否更新了某一列,用于 insert 或 update,不能用于 delete。例:

    create trigger f

    on tbl

    for update

    as

        if update(status) or update(title)

            sql_statement --更新了 status 或 title 列

     

    inserted、deleted

    这是两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录形成的表,deleted 保存的是 delete 或 update 之前所影响的记录形成的表。例:

    create trigger tbl_delete

    on tbl

    for delete

    as

        declare @title varchar(200)

        select @title=title from deleted

        insert into Logs(logContent) values('删除了 title 为:' + title + '的记录')

    说明:如果向 inserted 或 deleted 虚拟表中取字段类型为 text、image 的字段值时,所取得的值将会是 null。

     

    五、查看数据库中所有的触发器

    use 数据库名

    go

    select * from sysobjects where xtype='TR'

    sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象。在 name 一列,我们可以看到触发器名称。

     

    六、sp_helptext 查看触发器内容

     

    use 数据库名

    go

    exec sp_helptext '触发器名称'

     

    七、sp_helptrigger 用于查看触发器的属性

    sp_helptrigger 有两个参数:第一个参数为表名;第二个为触发器类型,为 char(6) 类型,可以是 INSERT、UPDATE、DELETE,如果省略则显示指定表中所有类型触发器的属性。

     

    例:

     

    use 数据库名

    go

    exec sp_helptrigger tbl

     

    八、递归、嵌套触发器

    递归分两种,间接递归和直接递归。我们举例解释如下,假如有表1、表2名称分别为 T1、T2,在 T1、T2 上分别有触发器 G1、G2。

     

    间接递归:对 T1 操作从而触发 G1,G1 对 T2 操作从而触发 G2,G2 对 T1 操作从而再次触发 G1...

    直接递归:对 T1 操作从而触发 G1,G1 对 T1 操作从而再次触发 G1... 

    嵌套触发器

     

    类似于间接递归,间接递归必然要形成一个环,而嵌套触发器不一定要形成一个环,它可以 T1->T2->T3...这样一直触发下去,最多允许嵌套 32 层。

     

    设置直接递归

     

    默认情况下是禁止直接递归的,要设置为允许有两种方法:

     

    T-SQL:exec sp_dboption 'dbName', 'recursive triggers', true

    EM:数据库上点右键->属性->选项。 

    设置间接递归、嵌套

     

    默认情况下是允许间接递归、嵌套的,要设置为禁止有两种方法:

     

    T-SQL:exec sp_configure 'nested triggers', 0 --第二个参数为 1 则为允许

    EM:注册上点右键->属性->服务器设置。 

     

    九、触发器回滚

    我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地实现无法更改用户名。

     

    use 数据库名

    go

    create trigger tr

    on 表名

    for update

    as

        if update(userName)

            rollback tran

     

    关键在最后两句,其解释为:如果更新了 userName 列,就回滚事务。

     

    十、禁用、启用触发器

    禁用:alter table 表名 disable trigger 触发器名称

    启用:alter table 表名 enable trigger 触发器名称

     

    如果有多个触发器,则各个触发器名称之间用英文逗号隔开。

     

    如果把“触发器名称”换成“ALL”,则表示禁用或启用该表的全部触发器。

    标签: sql触发器语句

    好文要顶 关注我 收藏该文  

    书写者
    关注 - 34
    粉丝 - 133

    +加关注

    0

    0

    » 下一篇:sql:快速删除数据库中所有表中的数据

    https://www.cnblogs.com/accumulater/articles/6064639.html

     

     

    展开全文
  • SQL语句创建触发器

    2017-08-28 16:15:00
    --假设XSCJ数据库中增加一新表XS_HIS,表结构和...创建一个触发器,当XS表被删除一行,把删除的记录写到日--志表XS_HIS中。 CREATE OR REPLACE TRIGGER del_xs BEFORE DELETE ON XS FOR EACH ROW BEGIN INS...
  • Oracle-触发器SQL语句优化触发器不同的DML(CRUD)操作,触发器能够进行一定的拦截,符合条件的操作方可操作基表,反之不可操作基表。 类似于Filter、Interceptor。为什么要使用触发器呢? 对DML操作做限制,...
  • T-SQL语句 2删除触发器 drop trigger 触发器名称[,...] 3重命名触发器 用查询分析器重命名 exec sp_rename 原名称, 新名称 sp_rename 是 SQL Server 自带的一个存储过程,用于更改当前数据库中用户创建的对象...
  • SQL语句触发器

    千次阅读 2020-06-21 14:39:00
    SQL语句之触发器SQL语句之触发器IF NOT EXISTS和 IF EXISTS的区别介绍使用AFTER触发器与INSTEAD OF触发器的区别INSTEAD OF触发器AFTER触发器Inserted和Deleted在insert、update、detele的简单使用示例AFTER触发器...
  • T-SQL语句创建触发器

    千次阅读 2009-05-07 23:38:00
    create trigger 触发器名 on 表或视图for|after|instead of --操作时机insert,update,deleteassql语句 例1: 要求:在order_test表建立insert触发器,当向order_test表插入一行,如果cust_test表中对应 记录status值...
  • 子查询中的语句结果有多个值,可以改成in试试 如: update 职业信息 set 聘用数量=聘用数量-1 where 职业号 in (select 职业号 from 就业信息 where 职业号=@zhiyehao)
  • Oracle PL/SQL的问题,DML操作中,是不是每条语句执行时都会检测是否有对应的触发器,这个检查机制是普遍存在,还是由对应的表开启或者触发(这个就由创建触发器时候涉及到的表决定),接着该表里面的语句才会进行...
  • sql触发器语句

    千次阅读 2017-08-01 23:35:41
    -- 触发器语句格式 create trigger tr_order -- 创建监听器,监听名 before/after -- 什么时间进行监听,在发生什么行为之前或之后 insert/update/delete -- 对什么行为进行监听...`sql语句操作命令` end cr
  • 在执行创建触发器sql语句时出现了错误。 错误找了好久,原因是我使用的mysql版本为5.6,没有begin和end关键字。 删除掉begin和end,创建成功。
  • 1、创建表 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprimarykey,/*主键,自动增加*/ usernamevarchar2(20) ); 2、创建自动增长序列 代码如下: ... 3、创建触发器 代码如下: CREATETRIGGERTest_In
  • 一、什么是触发器? 1、mysql触发器是:在当前的数据库表中设置一个对每行数据的一个监听器,监听相关事件,每当事件发生时。...执行代码就是sql语句sql语句块。 1、事件内容: 插入:insert ...
  • 触发器SQL语句的解释

    千次阅读 2019-01-04 11:06:42
    create trigger [修改罚款金额] on [惩罚表] for update as if update(罚款额) begin rollback transaction raiserror('在未交罚金前不能修改罚款金额',16,10) insert into modify_log ...select* from m...
  • SQL语句创建数据库及表结构,视图及触发器
  • ORACLE—plsql创建触发器语句

    千次阅读 2016-08-30 08:58:23
    create or replace trigger TIB_T_EXAM before insert on t_exam for each row declare integrity_error exception; errno integer; errmsg char(200); dummy
  • 行级触发器顾名思义就是该SQL影响的行数等于执行触发器的次数,语句触发器就是不管该SQL影响多少条数据,你执行一条SQL只触发一次操作 创建触发器行级触发器t_mydel create or replace trigger t_mydel after ...
  • SQL server创建触发器实现级联删除

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,240
精华内容 39,296
关键字:

创建触发器的sql语句