SQL server 触发器、视图
一.触发器
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 触发器、视图的更多相关文章
- 15、SQL Server 触发器
SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...
- (转)SQL Server 触发器
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...
- 刷新SQL Server所有视图、函数、存储过程
刷新SQL Server所有视图.函数.存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...
- 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO
刷新SQL Server所有视图.函数.存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...
- sql server 触发器详细应用
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发 ...
- 喜忧参半的SQL Server触发器
SQL Server触发器在非常有争议的主题.它们能以较低的成本提供便利,但经常被开发人员.DBA误用,导致性能瓶颈或维护性挑战. 本文简要回顾了触发器,并深入讨论了如何有效地使用触发器,以及何时触发 ...
- SQL Server 系统视图
SQL Server系统视图非常的多,因此不可能一个一个地写,我最近一直在想,对于数据库的系统视图应该如何学,但是看了一下目录之后,我呆了,我觉得每个写一次,可能都要花费1个星期的时间,如果对每一个返 ...
- sql server触发器的例子
发布:thebaby 来源:脚本学堂 [大 中 小] 本文介绍下,在sql server数据库中使用触发器的简单例子,有需要的朋友可以参考下,希望对你有一定的帮助. 原文地址:http:/ ...
- SQL SERVER分区视图
借助SQL SERVER分区视图,可以对SQL中的表进行集中管理,下文将以实例的方式为您详解SQL SERVER分区视图,希望对您学习SQL数据库能有所帮助. SQL SERVER分区视图给我们提供了 ...
- 自己写的sql server触发器练练--高手请您跳过吧
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo ALTER TRIGGER [insertReplyToic] ON [dbo].[bbsReplyTopic] ...
随机推荐
- Java基础知识强化之IO流笔记30:字节流4种方式复制mp4并测试效率
1. 需求:把e:\\哥有老婆.mp4 复制到当前项目目录下的copy.mp4中 字节流四种方式复制文件: • 基本字节流一次读写一个字节 • 基本字节流一次读写一个字节数组 • 高效字节流一次读写一 ...
- json <--->List集合,实体类 之间的相互转换
json所依赖的jar包http://files.cnblogs.com/files/wenjie123/json_jar%E5%8C%85.rar package com.hp.svse; impo ...
- 必应代码搜索 Bing Code Search 安装
微软这几天推出基于bing搜索引擎的 Bing Code Search ,可直接在浏览器上搜索和运行代码.目前中文版必应无法使用本功能,有需要的同学可以转到英文版进行搜索: 英文版必应: http ...
- WGS84经纬度坐标与web墨卡托之间的转换【转】
第一种方法: //经纬度转Web墨卡托 dvec3 CMathEngine::lonLat2WebMercator(dvec3 lonLat) { dvec3 mercator; ; ); ; mer ...
- build/envsetup.sh中hmm、get_abs_build_var、get_build_var解析
function hmm() { # 打印帮助信息 cat <<EOF Invoke ". build/envsetup.sh" from your shell to ...
- Linux中nat模式上不了网的问题怎么解决?
我是这么解决的
- DropDownList绑定多个字段值
发觉这个问题还是挺多人问的,简单写几个例子: 假设现有1张表名为:XUDAXIA , 该表里有2个字段: NAME , GENDER 达到效果: 将这2个字段绑定到DropDownList的Lis ...
- [转载]Oracle基础知识
一.oracle安装过程略 二.sys用户和system用户 (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限 默认密码是change_onins ...
- iOS8上本地通知接收不到的问题
需要手动加上这句话 if ([UIApplicationinstancesRespondToSelector:@selector(registerUserNotificationSettings:) ...
- jQuery 选择器【1】
jQuery 选择器 请使用我们的 jQuery 选择器检测器 来演示不同的选择器. 选择器 实例 选取 * $("*") 所有元素 #id $("#lastname&q ...