SQLServer数据库操作总结(sql语法的使用)(六)

2014-11-24 11:13:17 · 作者: · 浏览: 3
sqk,查询指定学号(作为输入参数)的学生姓名、课程号、成绩。
create    procedure   p_xsqk    @xh   char(6)
    as    select   姓名,课程号,成绩    from    xsqk , xs_kc   
     where   xsqk.学号=xs_kc.学号  and  xsqk.学号= @xh
go
执行:
exec  p_xsqk   ‘020102‘         --(1)按位置传递参数
exec  p_xsqk   @xh=‘020103‘    --(2)通过参数名传递参数
注意:因输入参数没有默认值,所以不能用“exec p_xsqk”

6.1.5 使用输出参数


语法:
create proc[edure] 存储过程名
@形参 数据类型 output ,…n
as SQL语句

执行:
[execute] 存储过程名 @实参 output ,…n

说明:
1.输出实参和输出形参的名字可以相同,也可以不同。
2.使用时,要先声明输入和输出实参变量。

操作:创建1个带有输入参数和输出的存储过程p_kh,返回指定教师(作为输入参数)所授课程的课程号(作为输出参数)。
create    procedure   p_kh
    @teacher  char(8) ,    @kch   char(3)    output
    as   
    select     @kch =  课程号   from   kc   where    授课教师= @teacher
go
执行:
declare    @teacher  varchar(8),  @kch  char(3)
set     @teacher='赵怡'
exec   p_kh   @teacher,  @kch  output
print    @teacher + ‘教师所受课程的课程号为:’ + @kch

6.1.6 使用返回值


语法:
return 整型表达式

作用:用于显示存储过程的执行情况

执行:
[execute] @状态值=存储过程名

操作:创建并执行存储过程p_find,用于查找指定的学生,如果找到,则返回数字1,否则返回0。
create    procedure   p_find
   @findname    char(8)
 as   
 if  exists (select   *  from   xsqk
        where  姓名=@findname)
     return   1
 else
     return  0
执行:
declare    @result    int
exec   @result=p_find   ‘陈伟‘
if   @result =1
	   print   ‘有这个人!‘
     else
        print   ‘ 没有这个人!

6.1.7 删除存储过程

语法:
drop proc[edure] 存储过程名

6.1.8 查看存储过程
语法:
sp_help 存储过程名 --显示存储过程的基本信息
sp_helptext 存储过程名 --显示存储过程的源代码

6.1.9 修改存储过程


语法:
alter proc[edure] 存储过程名
[@形参 数据类型 [=默认值] [output ],…n ]
as SQL语句

注意:
1.修改存储过程的定义后,原存储过程的权限设置仍有效
2.如果采用先删除存储过程再重建同名存储过程的方法,那么在原来存储过程上设置的权限将会全部丢失。

6.2 触发器

触发器就是是一种表或视图执行insert、 delete、update操作时,被系统自动执行的特殊的存储过程。

6.2.1 创建触发器

语法:

create trigger 触发器名

on 表名| 视图名

for | after | instead of [ insert , update, delete ]

as SQL语句

注意:1个表上可有多个触发器。 每个触发器只能作用在一个表上。这是一个一对多的关系

6.2.1.1 创建insert触发器

操作:在xscj库的xs_kc表上创建1个名为tr_insert_cj的触发器,当向xs_kc表进行插入操作时激发该触发器,并给出提示信息“有新成绩插入到xs_kc表中!”

create    trigger    tr_insert_cj
     on   xs_kc      after   insert
     as    print   ‘有新成绩信息插入到xs_kc表! ’
go
执行下面这条语句后会触发insert触发器
insert     into   xs_kc    values( '020105', '101', 87, null )

6.2.1.2 创建update触发器

操作:在student表上创建名为tr_update_xsqk2的触发器,当对该表的“姓名”列修改时激发该触发器,使用户不能修改“姓名”列。

create   trigger   tr_update_xsqk2   on   student   after   update
as
     if   update(姓名)
            begin
                  rollback   transaction         -- 撤消修改操作
                  raiserror(‘不能修改学生姓名!’ , 16 ,1) 
             end
go

执行下面这条语句后会触发update触发器
update   student   set   姓名=‘小花’    where    姓名=‘杨颖’   

6.2.1.3 创建delete触发器

操作:在xscj库的xsqk表上创建1个名为tr_delete_xsqk的触发器,当要删除指定学号的行时,激发该触发器,撤消删除操作,并给出提示信息“不能删除xsqk表中的信息

  create   trigger   tr_delete_xsqk
     on   xsqk
     after   delete
as
      rollback   transaction
      print    ‘不能删除xsqk表中的信息!’
go

执行下面这条语句会触发delete触发器
delete   xsqk    where    学号= '020101' 

6.2.2 更新触发器

语法:

alter trigger 触发器名

6.2.3 删除触发器

语法:

drop trigger 触发器名[,…n]

on {database | all server}

参考资料

数据库原理及应用》 课件

总结

不得不说,课件上有很多错误。起的名字还是拼音简写,⊙ ⊙b汗!。改了一部分,还有部分没改。个人觉得课堂上学道的东西不会太多,还是自己多动手比较好。像我这样把课件给整理一遍,估计整个计算机系再也找不出来第二个这样的奇葩了~O(∩_∩)O哈哈~