谈到函数和存储过程,我对她们就像苍老师一样只闻其人未有真正的体验过啊!SO为了下周的幸福只能撸几下啦。。
函数定义:
函数是用来执行可返回值到调用程序的计算或把计算集成到结果集众。-----《SQL从入门到精通》
夹杂点个人的理解:函数类似于面向对象中的方法,通过它的一系列操作来满足你内心深处的需求(貌似很强大的样子)
函数的好处:
无论是自己创建还是调用系统中的函数都能从某种程度上提高了工作的效率;想想微软大叔提供的那些内置函数吧,是不是有那种不经意间找到种子的感觉;
函数的分类:
标量函数:返回一个实际的数值;
表值函数:返回一个表,她分为两种类型:内联和多语句。
函数的通用语法
1 /* 2 标量函数语法 3 */ 4 CREATE FUNCTION [scheam_name.] function_name 5 ([{@parameter_name[AS][type_schema_name.] parameter_data_type [=default] 6 [READONLY]},[,...N]) 7 RETURNS return_date_type 8 [AS] 9 BEGIN 10 function_body 11 return scalar_expression 12 END 13 14 15 /* 16 多语句表值函数的语法格式 17 */ 18 CREATE FUNCTION [scheam_name.] function_name 19 ([{@parameter_name[AS][type_schema_name.] parameter_data_type [=default] 20 [READONLY]},[,...N]) 21 RETURNS @return_variable TABLE <table_type_definition> 22 [AS] 23 begin 24 function_body 25 return 26 end 27 28 /* 29 内联表值函数语法 30 */ 31 CREATE FUNCTION [scheam_name.] function_name 32 ([{@parameter_name[AS][type_schema_name.] parameter_data_type [=default] 33 [READONLY]},[,...N]) 34 RETURNS TABLE 35 [AS] 36 RETURN [() select_stmt []] 37 38 39 40 41
标量函数的使用
1 /* 2 标量函数的使用 3 */ 4 --计算两个整数的和 5 CREATE FUNCTION fn_JF_addTwoNum(@aa int,@bb int) 6 RETURNS int 7 as 8 begin 9 declare @c int 10 set @c=@aa+@bb 11 return @c; 12 end 13 --调用方式 14 print dbo.fn_JF_addTwoNum(1,2) 15 select dbo.fn_JF_addTwoNum(1,2)
表值函数的使用
1 /*内联表值函数的使用*/ 2 CREATE FUNCTION fn_GetStuInfo(@stuNo nvarchar(50)) 3 returns table 4 as 5 return 6 (select s.[stuNo],s.[name],g.grade from StuInfo s inner join gradeInfo g 7 on s.stuNO=g.stuNo where s.[stuNo]=@stuNo); 8 --调用方式 9 select * from fn_GetStuInfo(‘2013‘)
1 /*多语句表值函数*/ 2 CREATE FUNCTION fn_GetStuGradeInfo(@stuNo nvarchar(50)) 3 returns @table_name table( 4 stuNo nvarchar(50), 5 name nvarchar(50), 6 grade int 7 ) 8 as 9 begin 10 declare @name nvarchar(50),@grade int 11 select @name=s.[name],@grade=g.grade from StuInfo s inner join gradeInfo g 12 on s.stuNO=g.stuNo where s.[stuNo]=@stuNo 13 insert into @table_name(stuNo,name,grade) values(@stuNo,@name,@grade) 14 return 15 end 16 --调用方式 17 select * from fn_GetStuGradeInfo(‘2013‘)
后记:
该想想晚上应该吃点啥子了。。。。。。