`

SQL Server 2005系列教学_ 触发器

阅读更多
触发器:
本质是一个存储过程
常见的触发器类型:
插入触发器  insert
删除触发器  delete
更新触发器  update
插入触发器:
语法:
create trigger 名称
on 表名  for insert
as
begin
  
代码
end

select  * from users
insert into users values ('张三','男',20,40)
例:禁止插入新记录
alter trigger inse01
on users for insert
as
begin
  if exists( select  * from  inserted)   或者写成 count(*)
    rollback
   print '禁止插入新员工信息'
end
insert into users values ('张三风','男',20,40)
select  * from users
--simpletrigger.sql
--简单的触发器
use northwind
例:
alter trigger 简单触发器 on dufei for insert as
declare @ID int,@username nvarchar(50)
set @ID = @@identity
set @username = (select username from dufei where
ID=@ID)
print '最后写入的记录的编号是:' + convert(nvarchar,@ID) + '  用户名是:' + @username
go
insert dufei (username) values('吴小华')
但如果在print 后加一个rollback结果就不同了。说明是手插入到表中了,但又回滚了。
select @@identity
create table dufei
(id  int identity(1,1),
username varchar(10))

--drop trigger reminder
insert into employees(LastName,FirstName)
values('hahaha1','xixixi1')
select * from employees
--禁止触发器
alter table employees disable trigger reminder
 
--启用触发器
alter table employees enable trigger reminder
select * from employees
解除触发器:(删除触发器)
drop trigger 名称
drop trigger inse01

禁止插入行政部新员工
alter trigger inse02
on yuangong for insert
as
begin
if exists(select * from inserted where 部门='行政部' )
begin
  rollback
  print  '你的权限不够,不能插入行政部新员工!'
end
end
select  * from yuangong
delete from yuangong  where 姓名='于洋'
insert into yuangong values  ('0001','于洋','男',20,'2007-12-26','河南',3000,2000,500,1,'123456','保安部')
count(*)

create trigger inse03
on yuangong for insert
as
begin
     if (select count(*) from inserted  where 部门='' )>0
     begin
          rollback
          print  '不能插入新记录'
     end
end
drop trigger inse03
insert into yuangong values  ('0001','于洋','男',20,'2007-12-26','河南',3000,2000,500,1,'123456','保安部')

删除触发器:
 create trigger 名称
 on 表名 for delete
 as
 begin
   代码
  end
用到一个临时表: deleted 存放的是准备删除的记录
禁止删除技术部的员工
  alter trigger del01
  on  yuangong for delete
  as
  begin
     if exists(select * from deleted  where 部门='人事部')
     begin
         rollback
         print  '不能删除人事部员工'
     end
  end
select * from yuangong
delete from yuangong where 编号='0006'

更新触发器:
用到临时表: 两个:
inserted
deleted
禁止用户更新:
create  trigger upd01
on yuangong for update
as
begin
    if exists(select  * from inserted)
    begin
        rollback
        print  '不允许更改数据!'
    end
end
禁止更新基本工资和奖金
create  trigger upd01
on yuangong for update
as
begin
    if update(基本工资) or update(奖金)
    begin
        rollback
        print  '不允许更改数据!'
    end
end
 
select  * from yuangong
update yuangong set 年龄=30  where 姓名='于洋'
Create unique ix_name   on hr (姓,名)
create [unique][clustered][nonstered] index on 数据表名称(列名称)
只允许更改姓名,性别,年龄
create trigger upda02
on yuangong for update
as
begin
   if update(姓名) or update(性别)  or update (年龄)
    begin
        commit
     end
    else
    begin
      rollback
      print  '不能修改姓名,性别,年龄之外的数据'
     end
end
select * from yuangong
update yuangong set  姓名='于小洋',性别 ='女',年龄=30   where 姓名='于洋'
update yuangong set 编号='0008' where 姓名='于小洋'

create  table 学生表
(
姓名 nvarchar(8) not null primary key,
性别 nvarchar(2) not null ,
年龄 tinyint
)
create table 人数表
(
性别 nvarchar(2),
人数 int
)
insert 人数表 values ('女',0)
insert 人数表 values ('男',0)
drop TABLE 学生表

select  * from 学生表
select  * from 人数表
create trigger test2
on 学生表 for insert
as
begin
   if exists (select * from inserted where 性别='男')
   begin
     update 人数表 set 人数=(select count(*) from 学生表 group by 性别 having 性别='男')
     where 性别='男'
   end
   else
   begin
     if exists (select * from inserted where 性别='女')
      begin
         update 人数表 set 人数=(select count(*) from 学生表 group by 性别 having 性别='女')
          where 性别='女'
       end
   end
end

select  * from 学生表
select  * from 人数表
insert into 学生表 values ('小王','男',20)
insert into 学生表 values ('小胡','男',19)
alter trigger upd001
on 学生表  for  insert
as
begin
 
 update 人数表  set  人数=人数+1  where 性别 in (select 性别 from inserted )
end
drop trigger test2

select  * from 学生表
select  * from 人数表
insert into 学生表 values ('小孙','女',20)
insert into 学生表 values ('小纪','女',19)
delete from  学生表  where 性别='女'
实现删除学生记录
create trigger dele01
on 学生表 for delete
as
if exists(select  * from deleted)
 begin
    update 人数表 set 人数=(select count(*) from 学生表 where 性别='男')  where 性别='男'
        update 人数表 set 人数=(select count(*) from 学生表 where 性别='女')  where 性别='女'
 end
测试:  分开删除

 

分享到:
评论

相关推荐

    SQLServer2005_US_all示例

    标题“SQLServer2005_US_all示例”揭示了这是一个关于Microsoft SQL Server 2005的示例集合,特别强调的是美国英文版本。SQL Server是微软公司开发的一款关系型数据库管理系统(RDBMS),它广泛应用于数据存储、管理...

    SQL Server 2005基础教程_配套课件和脚本

    而脚本则是一系列实际的SQL命令,你可以运行它们来体验SQL Server 2005的功能。 总的来说,SQL Server 2005基础教程将引导你进入数据库管理的世界,帮助你掌握这个强大工具的核心知识。通过理论学习和实践操作,你...

    shujuku.rar_SQL Server2005_shujuku_教案_数据库 ppt

    SQL Server 2005支持T-SQL(Transact-SQL)编程语言,用于编写数据库查询、存储过程和触发器等。它还引入了集成的开发工具——SQL Server Management Studio(SSMS),为数据库管理员和开发者提供了一个统一的图形化...

    SQL Server 2005中文版关系数据库基础与实践教程.zip

    SQL Server 2005是Microsoft公司推出的一款关系型数据库管理系统,它在企业级数据管理、分析和报告方面表现出色。这款系统以其强大的功能、易用性和灵活性深受广大IT专业人员喜爱。本教程针对SQL Server 2005中文版...

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

     是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作  全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览无余。   本系列图书中文版得到了微软...

    SQL.Server.2005盛宴系列

    此系列可能包含了关于SQL Server 2005的安装、配置、性能优化、备份恢复、安全性设置、数据库设计、T-SQL编程、存储过程、触发器、视图、索引、事务处理、并发控制等众多主题。 "查看本次课程问题解答.url"可能是一...

    sql server 2005 宝典 源码

    在性能优化方面,SQL Server 2005提供了一系列工具和技巧,例如索引优化、查询优化器、统计信息的更新以及查询计划的分析。通过调整索引策略、减少数据争用、优化查询语句,可以显著提升数据库系统的整体性能。 ...

    SQL.Server.2005盛宴系列03_Adventure.Works示例数据库介绍

    "SQL Server 2005盛宴系列03"是一个针对该系统的视频教程,专注于Adventure Works示例数据库的介绍。这个教程可能是为了帮助初学者或有经验的DBA(数据库管理员)更好地理解和使用SQL Server 2005的功能。 ...

    SQL.Server.2005.zip_sql server 入门

    压缩包中的"[SQL.Server.2005数据库简明教程].tscc.exe"可能是一个教学软件或电子书,它将涵盖这些基础知识,并通过实例教你如何使用SQL Server 2005。通过学习这个教程,你将能够掌握SQL Server的基本操作,为更...

    SQL Server教学中约束和触发器的比较学习.pdf

    在SQL Server数据库中,约束和触发器各有其适用场景和优势。约束实现方法简单有效,适合实现简单的需求如主键、外键和域完整性要求。触发器则可以包含使用T-SQL代码的复杂处理逻辑,适用于实现复杂的、涉及多表的...

    SQL Server 2005应用开发技术与典型实例代码

    《SQL Server 2005应用开发技术与典型实例》采用案例教学的形式,由浅入深、循序渐进地介绍了SQL Server 2005数据库平台的知识体系。全书分为15章:第1章和第2章介绍SQL Server 2005的基本知识及管理和开发工具:第3...

    SQL2000SampleDb_sqlserver_solidt5v_

    标题“SQL2000SampleDb_sqlserver_solidt5v_”暗示了这是一个与SQL Server 2000相关的示例数据库文件,可能包含了用于教学或演示目的的数据和脚本。"solidt5v"可能指的是特定版本或特征,但在这里没有明确的解释。...

    SQL2005基础教程+SQL Server 2005数据库管理与开发电子教案+源码

    SQL Server 2005是微软推出的一款关系型数据库管理系统,它在企业级数据管理和开发领域扮演着重要的角色。此压缩包包含的资源是针对初学者的SQL2005基础教程,以及针对数据库管理与开发的专业电子教案,旨在帮助学习...

    SQL Server2005 教学课件

    《SQL Server 2005 教学课件》是一套详尽的教育资源,旨在帮助学习者深入理解和掌握Microsoft SQL Server 2005这一重要的关系数据库管理系统。SQL Server 2005作为微软公司推出的数据库平台,在企业级数据管理和分析...

    数据库应用技术——SQL Server 2005篇(第2版)

    "数据库应用技术——SQL Server 2005篇(第2版)-教案.rar" 文件可能包含教师教学所需的详细资料,如课程大纲、课件、案例分析及教学方法,有助于教师进行课程设计和课堂教学。这些教案通常会按照章节结构编排,每个...

    SQL Server 2005数据库简明教程

    《SQL Server 2005数据库简明教程》是一份专为教学设计的PPT教程,涵盖了SQL Server 2005的主要功能和操作。这个教程由一系列的PPT文件组成,包括对数据库管理、表操作、Transact-SQL语言、视图管理、触发器、权限...

    SQL Server 2005 视频教程 MSDN WebCasts 管理工具使用

    2. **Transact-SQL (T-SQL)**:作为SQL Server的扩展语言,用于执行数据查询、更新、插入和删除操作,以及创建存储过程和触发器等复杂数据库对象。 3. **数据库引擎**:负责处理所有与数据相关的操作,包括数据的...

    SQL Server 2005数据库ppt

    SQL Server 2005教学用PPT,内容非常全面,总共分十三章。 SQL Server 2005 第1章 SQL Server 2005关系数据库简介 第2章 服务器管理 第3章 Transact-SQL语言 第4章 数据库管理 第5章 表的操作与管理 第6章 ...

    SQL Server 2005基础教程

    ### SQL Server 2005基础教程知识点梳理 #### 一、概述 - **教材信息**:本教材为清华出版的《SQL Server 2005基础教程》电子教案,以PDF格式呈现。 #### 二、教学目标 - **理解数据库的重要性**:明确为何在现代...

Global site tag (gtag.js) - Google Analytics