一.触发器

1.触发器为特殊类型的存储过程,可在执行语言事件时自动生效。SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。

主要讲述DML触发器,DML触发器有两种:AFTER(FOR),INSTEAD OF触发器,同时DML 触发器使用 deleted 和 inserted 逻辑(概念)表。它们在结构上类似于定义了触发器的表,即对其尝试执行了用户操作的表。在 deleted 和 inserted 表保存了可能会被用户更改的行的旧值或新值。

  • 对于INSERT 操作,inserted保留新增的记录,deleted无记录
  • 对于DELETE 操作,inserted无记录,deleted保留被删除的记录
  • 对于UPDATE操作,inserted保留修改后的记录,deleted保留修改前的记录

2.禁用所有触发器的语句
alter table student disable trigger all
--启用所有触发器的语句
alter table student enable trigger all
--如果知道触发器的名字,可以将all改成所要关闭或启用的触发器的名称

create trigger TR_student_Delete --创建一个delete触发器
on student --对于那一个表的
instead of delete --替换掉delete 语句
as
insert into student values('成龙','男','三班',1007,1008,1009)
go
--执行一个delete语句,针对student表
delete from student where code =4
--执行上面语句的时候触发了TR_student_Delete触发器
--因为里面是instead of 是替换掉我执行的这个delete语句
--所以,code为4的数据没有被删除
--并且添加进去了一行新的数据

create trigger TR_student_Delete2 --创建一个delete触发器
on student --对于那一个表的
for delete --在执行了外部的delete语句后执行触发器里面的语句
as --与after相同
insert into student values('全智贤','女','二班',1004,1005,1006)
go
--执行delete语句
delete from student where code =30
--执行delete语句在student表上的时候,发现有触发器
--查看到是for或after
--首先执行完要执行的这个语句
--然后执行触发器里面的语句

--执行删除一条数据,
--用deleted来表示被删除的那条数据,可以从中获取值
create trigger TR_Teacher_delete
on teacher
instead of delete
as
declare @code int
select @code =(select code from deleted)
update teacher set name ='刘德华' where code = @code
go
--执行
delete from teacher where code = 1005
--上面的语句是应该在触发器前执行,所以用deleted表示这条数据
--可以在触发器中获取这行数据里面的任何列
--可以直接拿去使用

--insert添加一条数据,inserted表示新添加的数据,
--从中获取教师编号,
--并且根据教师编号来查看是lesson是音乐么,如果是音乐变成语文。
create trigger TR_teacher_Insert
on teacher
for insert
as
declare @code int
select @code = (select code from inserted)
declare @lesson char(10)
select @lesson = lesson from teacher where code =@code
if @lesson='音乐'
update teacher set lesson ='语文' where code =@code
go
--执行
insert into teacher values('谭咏麟','音乐',55,'1950-04-05')

--对于INSERT 操作,inserted保留新增的记录,deleted无记录
--对于DELETE 操作,inserted无记录,deleted保留被删除的记录
--对于UPDATE操作,inserted保留修改后的记录,deleted保留修改前的记录

二.视图

1.select* from cangku
   select * from gongying
--将以上两个语句写成一个语句显示
select cangku.ccode,cname,cprice,cshu,cgcode,gongying.gname,gtel from cangku , gongying where cangku.cgcode=gongying.gcode
--join on
select cangku.ccode,cname,cprice,cshu,cgcode,gongying.gname,gtel from cangku join gongying on cangku.cgcode=gongying.gcode

2.视图创建(语句进行创建视图)
create view cangkugongying--创建视图的语法
as--as go中间放上我所需要的一个查询语句
select cangku.ccode,cname,cprice,cshu,cgcode,gongying.gname,gtel from cangku join gongying on cangku.cgcode=gongying.gcode
go
--调用视图
select *from cangkugongying--视图就是一个虚拟的表,所以可以from

3.视图创建(鼠标操作创建视图)

在视图上右击选择新建视图,

在弹出的页面选择要建立关系的表的名称,

选择需要的列的名称,并保存取名。

保存完毕后就可以利用语句直接调用视图。视图就是一个虚拟的新建表。

select * from xin
select cname,cshu from xin

SQL server 触发器、视图的更多相关文章

  1. 15、SQL Server 触发器

    SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...

  2. (转)SQL Server 触发器

    SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...

  3. 刷新SQL Server所有视图、函数、存储过程

    刷新SQL Server所有视图.函数.存储过程 更多   sql   此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...

  4. 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO

    刷新SQL Server所有视图.函数.存储过程 更多   sql   此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...

  5. sql server 触发器详细应用

    SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用.  Ø 什么是触发 ...

  6. 喜忧参半的SQL Server触发器

    SQL Server触发器在非常有争议的主题.它们能以较低的成本提供便利,但经常被开发人员.DBA误用,导致性能瓶颈或维护性挑战. 本文简要回顾了触发器,并深入讨论了如何有效地使用触发器,以及何时触发 ...

  7. SQL Server 系统视图

    SQL Server系统视图非常的多,因此不可能一个一个地写,我最近一直在想,对于数据库的系统视图应该如何学,但是看了一下目录之后,我呆了,我觉得每个写一次,可能都要花费1个星期的时间,如果对每一个返 ...

  8. sql server触发器的例子

    发布:thebaby   来源:脚本学堂     [大 中 小] 本文介绍下,在sql server数据库中使用触发器的简单例子,有需要的朋友可以参考下,希望对你有一定的帮助. 原文地址:http:/ ...

  9. SQL SERVER分区视图

    借助SQL SERVER分区视图,可以对SQL中的表进行集中管理,下文将以实例的方式为您详解SQL SERVER分区视图,希望对您学习SQL数据库能有所帮助. SQL SERVER分区视图给我们提供了 ...

  10. 自己写的sql server触发器练练--高手请您跳过吧

    set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo ALTER TRIGGER [insertReplyToic] ON [dbo].[bbsReplyTopic] ...

随机推荐

  1. python学习笔记--Django入门三 Django 与数据库的交互:数据建模

    把数据存取逻辑.业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller (MVC)模式.在这个模式中, Model 代表数据存取层,View 代表的是系统中 ...

  2. VS2010调试多进程--医疗His调试中使用

    有些时候碰到自己开发的程序嵌入到别人的框架中,而在接口的地方出了问题,而又不方便将自己的模快加入到别人的工程中这个时候VS的附加到进程调试变得不可或缺了,直奔主题 http://msdn.micros ...

  3. PhotoShop常用快捷键(1)

    一.工具栏工具 移动工具 [V] 矩形.椭圆选框工具 [M] 套索.多边形套索.磁性套索 [L] 快速选择.魔棒工具[W] 裁剪工具 [C] 吸管.颜色取样器 [I] 修补.污点修复[J] 画笔工具 ...

  4. 9张思维导图学习Javascript(转)

    思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来 ...

  5. Access获取新插入数据的自增长主键Id

    sqlserver有output,Oracle有Sequence.Access用下面的方法: public int InsertEx(User user) { ; using (OleDbConnec ...

  6. MyEclipse激活失败,解决办法

    文章参考:http://www.cnblogs.com/dingyuanxin/p/4046356.html 失败可能是:systemid和exe破解出来的那个对应不上: 1.启动MyEclipse, ...

  7. HDU_1406 完数

    Problem Description 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3:28=1+2+4+7+14. 本题的任务是 ...

  8. angularjs应用骨架(3)

    好,继续上一章节我们继续聊聊angularjs骨架.开发任何一款优秀的应用都会面临一项非常困难的工作,那就是找到一种合适的方式方法把代码组织在合适的功能范围内.我们已经看过控制器的处理方式,它会提供一 ...

  9. 《VTL语法参考指南》中文版[转]

    转自:http://blog.csdn.net/javafound/archive/2007/05/14/1607935.aspx <VTL语法参考指南>中文版 源文见 http://ve ...

  10. 精通 Oracle+Python,第 7 部分:面向服务的 Python 架构

    面向服务的架构 (SOA) 在当今的业务战略中具有至关重要的作用.混搭企业组件已成为所有任务关键的企业应用程序的标准要求,从而确保在企业架构的各层实现顺畅的服务编排.对此,Python 是一个不错的选 ...