SQL Sever 2005第13章 存储过程及自定义函数
- 格式:ppt
- 大小:248.50 KB
- 文档页数:39
SQL Server 2005存储过程与触发器1、基本储存过程的创建Stduent (Sno char (10),Sname char(10),Ssex char(2), Sage int ,Sdept char(20),Shobby char(10))Course(Cno char(10),Cname char(20),Ccredit int)SC(Sno char(10),Cno char(10),Grade int)①创建一存储过程get_student_num,利用输出参数形式获取学生人数信息。
并利用CALL调用该存储过程查看结果。
create procedure get_student_num(@num int output)asselect@num=COUNT(sno)from Studentdeclare@student_num intexec get_student_num@student_num outputprint@student_num②创建一存储过程get_student_by_sno,通过输入学生编号作为参数,获得该学生的记录信息。
并利用CALL调用该存储过程查看结果。
create procedure get_student_by_sno(@sno int)asselect*from Student where Sno=@snoexec get_student_by_sno'11010'③创建一存储过程update_sage_by_sno,通过输入学生编号、年龄作为参数,将指定学生的年龄更改为指定的年龄。
并利用CALL调用该存储过程查看结果。
create procedure update_sage_by_sno(@sno int,@age int)asupdate Student set Sage=@age where Sno=@snoexec update_sage_by_sno'11010','23'④创建一存储过程delete_student_by_sno,通过输入学生编号作为参数,删除该学生记录。
SqlServer存储过程和函数浅谈今天给⼤家总结⼀下sql server中的存储过程和函数。
本⼈是⼩⽩,⾥⾯内容⽐较初级,⼤神不喜勿喷⾃⾏飘过就是。
⾸先给⼤家简单列出sql server中的流控制语句,后⾯会⽤到的^_^sql server常⽤控制语句1.begin..end语句:该语句⽤来定义⼀串由顺序执⾏的SQL语句构成的块。
beginstatement blockend2.if....else语句:该语句⽤来定义有条件执⾏的某些语句。
if boolen_expressionstatement[else [if boolean_expression] statement]⽰例:查询学号为9704学⽣的成绩状况if ( select min (mark) from student where sno='9704') >90print' 学⽣成绩全部优秀 'elseif ( select min (mark) from student where sno='9704') >60print' 学⽣成绩全部及格 'elseprint' 学⽣成绩全部及格 'View Code3.while、break和continue语句:写过程序的同学相⽐对这个并不陌⽣,直接上代码⽰例:学号为9705学⽣的平均成绩如果⼩于75,则将该学⽣的每门成绩以5%的⽐例提⾼,当平均成绩⼤于等于75或者所有课程都及格时,终⽌操作。
while(select avg( mark) from student) <75beginupdate studentset mark= mark*1.05if(select min( mark) from student) >=60breakendView Code4.declare语句:⽤来定义⼀个局部变量,可⽤select语句为该变量赋初值。
SQL Server 2005 自定义函数语汇小结由于工作的需要,了解下SQL Server 2005 函数的写法,现在总结一下:对于SQL Server 2005 数据库而言,函数与存储过程在语法方面是有很大的相同点,最大的不同就是函数有返回值,直接使用returns ,而存储过程则使用output来声明输出变量一、下面先说明下,如何创建函数1、创建没有返回值与没有参数的函数CREATE FUNCTION my_function()ASBEGINDECLARE @variable varchar(255) --声明字符型变量DECLARE @variable int --声明整形型变量...(do something)SET @variable = '12345' --对变量variable赋值END2、创建没有返回值有参数的函数CREATE FUNCTION my_function(@user_Name varchar(128),@password int(6))ASBEGINDECLARE @variable_1 varchar(255) --声明字符型变量...(do something)SET @variable_1 = @user_Name + convert(varchar(255),@password) --将变量@user_Name与@password连接赋给@variable_1,其中convert()函数是将int型转为varchar型END3、创建有返回值与有参数的函数CREATE FUNCTION my_function(@user_Name varchar(128),@password int(6))returns varchar(255)--设置返回值,记住是returns 而不是returnASBEGINDECLARE @result varchar(5)DECLARE @fagle varchar(5)SET @result = select er_Name from USERS as users where er_Name = @user_Name and users.password = @passwordIF @result = ''BEGINSET @fagle = 'NO'ENDELSEBEGINSET @falge = 'YES'ENDreturn @result --返回结果END二、删除一个函数语法DROP FUNCTION my_function三、执行一个函数语法select dbo.my_function(...) --根据有没参数来处理go--注:在SQL Server 2005 中,有内部函数与外部函数,数据库系统自带函数,如sum(),count()等等,这些称为内部函数,而我们自定义的函数称为外部函数。
什么是存储过程,在存储在服务器上的 T-SQL 语句的命名集合,是封装性任务的方法,支 持变量及条件的编程。
SQL Server 的存储过程与其他编程语言中的过程 (包括函数) 类似, 可以包含数据库操作 (调 用其他过程)的编程语句,可以接受参数,可以返回状态值以表明成功或失败,以输出参数 的形式将多个值返回至调用过程 SQL Server 支持五种类型的存储过程: 系统存储过程(sp_) :存储在 master 数据库中。
本地存储过程:在单独的用户数据库中。
临时存储过程:局部的以#开头,全局的以##开头。
远程存储过程:分布式查询支持此功能。
扩展存储过程:在 SQL Server 环境外执行。
存储过程的优点 封装商务逻辑, 若规则或策略改变只需修改存储过程就可以直接使用, 屏蔽数据库的详细资 料,用户不需要访问底层数据库和数据库对象。
提供安全机制,只需要提供存储过程的权限 而不需要提供整个数据库中数据的一个权限。
另外, 存储过程能够通过预编译的语句来确定执行哪一部分而不是都执行。
在传输过程中传 输的存储过程而不是数据,减少了通信量,能够实现一个较快的执行速度。
create proc liuhaoran as select price from titles where price>15 select title from titles where price<=15 在存储过程里可以包含任何数目和类型的 T-SQL 语句,但不能包含 create proc 、create trigger、create view 执行创建存储过程的用户必须是 sysadmin、db_owner 或 db_ddladmin 角色的成员,或必须 拥有 CREATE PROCEDURE 权限 存储过程有大小的限制,最大为 128M 存储过程可以传递参数,创建存储过程,定义两个浮点型的参数,无返回值 CREATE PROCEDURE titlespro @Beginningprice float,@Endingprice float AS IF @Beginningprice IS NULL OR @Endingprice IS NULL BEGINprint 'no price is exits' RETURN END SELECT price FROM titles WHERE price BETWEEN @Beginningprice AND @Endingprice GO/*执行语句,输入两个价格值作为参数值*/ exec titlespro 10,19指定参数的依据和指导原则 所有的输入参数值都应该在存储过程开始的时候进行检查, 以尽早捕获缺失值和非法值 应该为参数提供合适的默认值,可以未指定参数值的基础上执行存储过程 一个存储过程最多可以有 1024 个参数 不同存储过程可以使用相同的参数名 使用参数的指导原则 可以使用@参数=值的格式来指定参数,此方法可以按任意顺序来传递参数 对于有默认值的参数在调用存储过程的过程中可以不指定参数值 存储过程可以使用输出参数 --创建存储过程输入两个输入参数,定义一个输出参数 CREATE PROCEDURE Mathadd @m1 int, @m2 int, @result int OUTPUT --定义输出参数 AS SET @result=@m1+@m2 GO 调用过程如下: declare @resultvalues int exec mathadd 12,16,@resultvalues output --输出参数的值赋给变量 print 'The result is: '+convert(char,@resultvalues) 存储过程通过输出参数向调用它的存储过程或客户端返回信息, 通过输出参数, 存储过程的 运行结果可以保留到程序运行结束。