SQL学习之--触发器

USE [learn2]
GO
/****** Object:  Trigger [dbo].[trigger_AdClass]    Script Date: 09/30/2014 09:01:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <Author,,sushine>
-- Create date: <Create Date,,2014-9-29>
-- Description:    <Description,,保证子父级 webpageId 关联一致;或者子级单独是可以的>
-- =============================================
create TRIGGER [dbo].[trigger_AdClass] on [dbo].[AdClass]
   AFTER insert,update
AS
BEGIN try
    declare @err nvarchar(256),@classId int,@parentId int;
    if(exists(select 1 from inserted))--当增加一条数据的时候和当修改parentId的时候
    begin
        select @classId=classId from inserted;
        select @parentId=parentId from inserted;
        if(@parentId is not null)
        begin
            update AdClass set WebPageId=(select WebPageId from AdClass where ClassId=@parentId) where AdClass.ClassId=@classId;
        end
    end
    if(update(webpageId))--当修改webpageId的时候
    begin
        select @classId=classId from inserted;
        update AdClass set WebPageId=i.WebPageId from inserted i where adclass.ClassId in(select ClassId from dbo.AdClassTree(@classId,null) where Depth>1);
    end
    --else if(update(parentId))
    --begin
    --    select @parentId= parentId from inserted;
    --    select @classId=classId from inserted;
    --    update AdClass set WebPageId=(select WebPageId from AdClass where [email protected]) where [email protected];
    --end
end try
begin catch
    rollback;
    set @err=ERROR_MESSAGE();
    Raiserror(@err,16,0);
end catch

触发器   inserted  和 deleted  两种。

当insert 和update的时候用inserted

时间: 2024-07-30 19:00:47

SQL学习之--触发器的相关文章

SQL学习(时间,存储过程,触发器)

SQL学习 几个操作时间的函数 1 --datapart 获取时间中的年月日时分秒等部分 2 select DATEPART(year,current_timestamp); 3 select DATEPART(DAY,current_timestamp); 4 select DATEPART(MONTH,current_timestamp); 5 6 --dateadd 在相应时间上加上年月日时分秒等 7 select CURRENT_TIMESTAMP,DATEADD(DAY,10,CURR

Oracle之PL/SQL学习笔记之触发器

Oracle之PL/SQL学习笔记之触发器 触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行. 即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接收参数.所以运行触发器就叫触发或点火(firing).ORACLE事件指的是对数据库的表进行的INSERT. UPDATE及D

Oracle之PL/SQL学习笔记

自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家批评指正. PL/SQL定义:PL/SQL是由Oracle开发,专门用于Oracle的程序设计语言. PL---Procedural Language. SQL—Structure QueryLanguage.PL/SQL包括过程化语句和SQL语句     PL/SQL的单位:块. 一个块中可以嵌套

Sql学习总结(一)

—周学习总结 1.在建表是定义的数据类型和我们插入数据时数据类型不一致 2.注意join 和 left join在运用中的差别. 3.group by 原则:select 后面的所有列中,没有聚合函数的列,必须出现在group by 后面. 4.当我们在统计排名的时候,如果出现相同的排名要记得使用 with ties. 5.order by 默认升序排序,也可以用ASC标识,降序desc. 6.distinct 去重复 7.批插入 insert into table_name select  

SQL中的触发器

触发器 (一)理解: 是一种特殊的存储过程,它不能显式地调用,而是进行insert.delete.update时被自动低激活.总结一句话就是:用来实现对标实施完整性约束的. SQL Server为每个触发器都创建了两个表:inserted和deleted表.它们是系统维护的,它们存在在内存中,不是在数据库中,这连个标的结构总是与被该触发器作用的标的结构相同.触发器执行与该触发器相连的这两个表也被删除. (二)类型: Instead of 和After触发器 instead of 触发器用于替代(

SQL 学习日志01

查看一个数据库的所有表: Select TABLE_NAME FROM 数据库名称.INFORMATION_SCHEMA.TABLES Where TABLE_TYPE='BASE TABLE' (select * from 表名 where 条件) 查看一张表的表结构: sp_help table_name(表名)  获取的信息比较全 sp_columns table_name(表名) 创建数据库: use master go create database test01(数据库名) 删除数据

SQL 学习日志02

SQL数据类型 1.字符类型 char   --定长字符数据   如 char(12)  这字段就会占用12字节的空间,无论这个字段只填写了2个字节.一般在可确定这字段长度时选用,如sex字段(因只有男和女两项可选)就可用 char(2). varvhar   --可变长字符数据  如varchar(50) 这字段最大只能填写50字节,按实际填写的字节存储.一般在不确定这字段长度时使用,如 Smail字段(因邮箱的长度不确定) 就可用varchar(50). text    --用来存储大量非统

TERADATA SQL学习随笔&lt;一&gt;

最近在TERADATA环境学习SQL.在这里记录一下学习中查过的知识点,作为备案. 目录: 关于SQL学习及所用在线数据库 表联合 (join) SQL子查询 在select时创建新字段 (as, case when) 数据分组 (group by + 聚合函数count, sum, avg等) 利用over (partition by)进行数据分组并创建新字段 样本选择 1.关于SQL学习及所用在线数据库 之前有看过一些SQL学习的书.但如果从学习效率来说,跟着书学习SQL,不如直接看生产环境

SQL学习笔记:选取第N条记录

Northwind数据库,选取价格第二高的产品. 有两种方法,一个是用Row_Number()函数: SELECT productname FROM (SELECT TOP 2 productname, Row_Number() OVER (ORDER BY unitprice desc) AS rownum FROM Products) AS tbl WHERE rownum = 2; 另一种是对子语句的的结果再进行排序: SELECT top 1 productname FROM (SELE