Sql Server存储过程和函数浅谈
今天给大家总结一下sql server中的存储过程和函数。本人是小白,里面内容比较初级,大神不喜勿喷 自行飘过就是。。
首先给大家简单列出sql server中的流控制语句,后面会用到的^_^
1.begin..end语句:该语句用来定义一串由顺序执行的SQL语句构成的块。
begin
statement block
end
2.if....else语句:该语句用来定义有条件执行的某些语句。
if boolen_expression
statement
[else [if boolean_expression] statement]
if ( select min (mark) from student where sno= '') > 90
print ' 学生成绩全部优秀 '
else
if ( select min (mark) from student where sno= '') >60
print ' 学生成绩全部及格 '
else
print ' 学生成绩全部及格 '
3.while、break和continue语句:写过程序的同学相比对这个并不陌生,直接上代码
while(select avg( mark) from student) < 75
begin
update student
set mark= mark*1.05
if(select min( mark) from student) >=60
break
end
4.declare语句:用来定义一个局部变量,可用select语句为该变量赋初值。这个变量必须用@开头,跟着一个标识符
declare @variable_name datatype
[,@variable_name datatype]....
示例:查询学号为9704学生的成绩状况
declare @verygood int
select @verygood = min( mark) /*使用select 赋值*/
from student
where sno= ''
if @verygood > 60
print ' 成绩合格'
5.return语句:用来无条件地退出一个查询或一个过程。
return [int_expression]
6.waitfor语句:用来定义某天中的一个时刻,执行一个语句块。 语法如下
begin
waitfor time '15:41'
execute update_all_stats
end
使用表结构
1. 创建存储过程
create procedure procedure_name [;version number]
[{ @parameter data_type}
[varying] [=default value][output]
] [,...n]
[with
{recompile|encryption|recompile,encryption}]
[for replication]
as sql_statement [...n]
解释:
- procedure_name是存储过程的名称,最多可有128个字符;
- version number为版本号
- @parameter是存储过程参数名。可以声明一个或多个参数,当调用该存储过程时,除非定义了参数缺省值,用户必须给出所有的参数值。一个存储过程至多有1024个参数,参数可以用作存储过程中的变量名,但参数不能用作列名、表名或其他数据库对象的名称
- data_type是参数的数据类型。在存储过程中所有的数据类型都可被用作参数,但是如果参数为游标(cursor)数据类型,则该参数必须被指定为varing和output。
- varying指定由output参数支持的结果集,仅应用于游标参数。
- default value是指参数的缺省值。
- output表明该参数是一个返回参数。用output参数可以向调用者返回信息,该参数在存储过程中可以变化,但是Text类型参数不能用作output参数。
- recompile指明sql server并不保存该存储过程的执行计划,该存储过程每执行一次都要重新编译。默认每次调用时都使用同一计划
- encryption为syscomments表中存储过程条目加密,防止用户查看编译后的语句。
- for replication选项指明了该存储过程只能在复制过程中执行
- sql_statement是包含在存储过程中的任何数量和类型的sql语句
create procedure usp_select_teacher @depart char( 10),@avg_age int output,@max_age int output
as
select * from teacher
where dname= @depart
select @max_age= max(age )
from teacher
where dname= @depart
select @avg_age= avg(age )
from teacher
where dname= @depart
if @avg_age <= 30
select ' 年龄结构'= '年龄结构偏年轻', '平均年龄' =@avg_age
if @avg_age > 30 and @avg_age <=40
select ' 年龄结构'= '年龄结构合理', '平均年龄' =@avg_age
if @avg_age > 40
select ' 年龄结构'= '年龄结构偏大', '平均年龄' =@avg_age
2.调用存储过程
declare @avgage int ,@maxage int
execute usp_select_teacher ' 计算机', @avgage output, @maxage output
我的运行结果如下:
- 标量型函数(Scalar Function):返回一个确定类型的标量值。
- 内联表值型函数(Inline Table-valued Function):以表的形式返回一个返回值,即返回的是一个表,相当于一个参数化的视图
- 多声明表值型函数(Multi-statement Table-Valued Function):可以看做标量型和内联表值型函数的结合体。返回值是一个表,但它和标量型函数一样,有一个begin-end语句括起来的函数体,该函数体包含插入语句,向返回表中插入数据。
1.标量型函数
create function year_wage(@work_date datetime, @now_date datetime,@per_wage decimal)
returns decimal
as
begin
return (( year(@now_date )-year( @work_date)) * @per_wage)
end
调用函数语句:
select dbo. year_wage ('2014-10-01' ,getdate(), 12) as ' 工龄工资'
2.内联表值型函数
create function course_student(@course_name varchar(20 ))
returns table
as
return ( select s.*
from student as s,course as c
where s. cno=c .cno and c.cno in(select cno from course
where cname= @course_name))
调用函数语句:
select * from course_student ('数据库设计 ')
3.多声明表值型函数
create function [dbo].[TeacherInfo] (@depart varchar (20))
returns @TeacherInfo table
(T_name varchar (8),
T_sex char( 2),
T_dname varchar( 20),
T_cno int primary key ,
T_cname varchar( 20),
t_ctime int)
as
begin
insert @TeacherInfo
select T. TNAME,T .TSEX, T.DNAME ,T. CNO,C .CNAME, C.CTIME
FROM TEACHER AS T,COURSE AS C
WHERE C. CNO=T .CNO
AND T. CNO IN (SELECT CNO FROM TEACHER WHERE DNAME=@depart )
return
end
调用函数语句:
select * from teacherinfo ('数据库设计 ')
希望大家读后不要有不适、呕吐之感== 以上内容都是存储过程、函数基础知识,游标之类的没有出现 本着步步为营原则,先把基础的搞懂再说。我在这里主要起抛砖引玉的作用,希望各位同学能有一点收获就好
Sql Server存储过程和函数浅谈的更多相关文章
- sql server中常用方法函数
SQL SERVER常用函数 1.DATEADD在向指定日期加上一段时间的基础上,返回新的 datetime 值. (1)语法: DATEADD ( datepart , number, date ) ...
- SQL Server 分隔字符串函数实现
在SQL Server中有时候也会遇到字符串进行分隔的需求.平时工作中常常遇到这样的需求,例如:人员数据表和人员爱好数据表,一条人员记录可以多多人员爱好记录,而往往人员和人员爱好在界面展示层要一并提交 ...
- SQL Server存储过程中使用表值作为输入参数示例
这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...
- SQL Server UDF用户自定义函数
UDF的定义 和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且尅作为一个单元爱进行调用.UDF和存储过程的主要区别在于返回结果的方式. 使用UDF时可传入参数, ...
- 14、SQL Server 存储过程
SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...
- C# 调用存储过程 Sql Server存储过程 存储过程报错,程序中的try
C#程序调用Sql Server存储过程,存储过程中报错情况,返回值... 0.SQL存储过程 USE [Opos] GO /****** Object: StoredProcedure [dbo]. ...
- SQL Server存储过程输入参数使用表值
转载自:http://blog.csdn.net/smithliu328/article/details/9996149 在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使 ...
- SQL Server存储过程 对数组参数的循环处理
方法一 分割 例:通过SQL Server存储过程传送数组参数删除多条记录 eg. ID 值为'1,2,3' 以下存储过程就是删除表中id号为1,2,3的记录: CREATE PROCEDURE De ...
- SQL Server 存储过程具体解释
SQL Server 存储过程具体解释 存储过程的优缺点 ◆长处: 运行速度更快. 存储过程仅仅在创造时进行编译,而一般SQL语句每运行一次就编译一次,所以使用存储过程运行速度更快. 存储过程用于处理 ...
随机推荐
- 【网络可靠版】Extjs4 Treegrid 使用实例
最近调试EXTJS 4的treegrid实例,看了很多水友的文章,以及官方的demo, 没一个可靠的,全都无法显示出来.像对于我们习惯用C++的coder来说,EXTJS简直就是一群无政府土匪来维护的 ...
- MDCC 2014移动开发者大会 小礼品展商活动
MDCC 2014移动开发者大会 小礼品展商活动 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVzdGNzX2Ru/font/5a6L5L2T/fon ...
- tb连续aaaaa123aaa自适应
在连续的字符串数字中,td不会自适应大小,需要加上样式 style="word-break : break-all; overflow:hidden; " <table> ...
- CSharp SQLServer 登陆
=======后台SQLServer存储过程================ --创建数据库create database Stu; --创建表use MyShool;if exists(select ...
- Javascript 进阶 作用域 作用域链
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25076713 一直觉得Js很强大,由于长期不写js代码,最近刚好温故温故. 1. ...
- 如何设置一个activity透明
1.在AndroidManifest.xml文件中设置: android:theme="@android:style/Theme.Translucent 此代码固定为全背景透明. 2.在Ac ...
- 深度分析 Java 的 ClassLoader 机制(源码级别)(转)
写在前面:Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中,JVM在加载类的时候,都是通过ClassLoa ...
- C#改动文件或目录的权限,为指定用户、用户组加入全然控制权限
C#改动文件或文件夹的权限,为指定用户.用户组加入全然控制权限 //给Excel文件加入"Everyone,Users"用户组的全然控制权限 FileInfo fi = new F ...
- AC自己主动机
AC自己主动机 AC自己主动机是KMP和Trie的结合,主要处理多模板串匹配问题.以下推荐一个博客,有助于学习AC自己主动机. NOTONLYSUCCESS 这里另一个Kuangbin开的比赛,大家 ...
- uml 9图不同的角度品种分类
只要阅读uml视频后为其9一些模糊样图或理解.话又说回来后来他们自己的系统看着笔记,统的了解.以下分别从两个不同的角度对uml中9种图进行理解以及当中某些图的区分,本人比較菜,有些不完好的地方欢迎提出 ...