T-SQL 自定义函数

 

初始化创建一个student表

 

sno sname ssex sage sdept
1001 张三 20 C1
1002 李四 22 C2
1003 李莉 20 C3
1004 陈旭 22 C1
1005 陈宇 23 C3
1006 王五 21 C1
1007 张莉莉 20 C2
1008 王晓 23 C3
1009 张斌 22 C1
1010 张淑芳 20 C2
1011 李天才 21 C3

 

1).创建标量函数的语法格式

 

 

CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type 
    [ = default ] } 
    [ ,...n ]
  ]
)
RETURNS return_data_type
    [ WITH  [ ,...n ] ]
    [ AS ]
    BEGIN 
                function_body 
        RETURN scalar_expression
    END
[ ; ]
 

 

其中参数说明如下:

   (1)function_name :用户自定义函数的名称,该名称在数据库中必须唯一。

   (2)@parameter_name :用户自定义的参数,如果函数的参数有默认值,在调用该函数是必须指定“DEFAULT”关键字才能获得默认值。

   (3)parameter_data_type :参数的l数据类型。

   (4)return_data_type:是标量用户自定义函数的返回值类型。

   (5) function_body :有一系列T-SQL语句组成的函数体。

   (6)scalar_expression:指定标量返回的数量值。


   【例】 统计某个系的平均年龄

 

 

 CREATE FUNCTION [dbo].[stu_info](@sdept varchar(10))
        RETURNS float
        AS 
         BEGIN 
           declare @sage float
           set @sage= (select avg(sage) from student where sdept=@sdept  group by sdept)
           RETURN @sage
        END
  ------------------------------------
SELECT dbo.stu_info('C1') as age

 

age
21

 

 2)创建直接表值函数语法格式 

 

 

CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type 
    [ = default ] } 
    [ ,...n ]
  ]
)
RETURNS TABLE
    [ WITH  [ ,...n ] ]
    [ AS ]
        RETURN (select_statement[])
   [ ; ]
 

 

参数说明如下:

 (1)TABLE:指定返回值为一个表。

 (2)select_statement:单个select语句确定返回的表的数据。


  【例】返回系别为C1的学生信息

 

 

CREATE FUNCTION stu_info(@sdept varchar(10))
RETURNS TABLE 
AS 
RETURN(SELECT * FROM dbo.student WHERE sdept=@sdept)
------------------------------
SELECT * FROM dbo.stu_info('C1')
 

 

 

 

3)创建多语句表值函数语法格式 

 

CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type 
    [ = default ] } 
    [ ,...n ]
  ]
)
RETURNS @return_variable TABLE    
     [ WITH  [ ,...n ] ]
    [ AS ]
    BEGIN 
                function_body 
        RETURN scalar_expression
    END
[ ; ]
 

参数说明如下:

 

 (1)@return_variable:一个TABLE类型的变量用于存储和累积返回的表中的数据行。


【例】 查询年龄大于22的学生信息

 

CREATE FUNCTION stu_hage(@age int)
RETURNS @height_age TABLE(sno int ,sname varchar(10),ssex varchar(10),sage int ,sdept varchar(10)) 
AS 
BEGIN
  INSERT @height_age 
  SELECT * FROM  dbo.student where sage>@age
RETURN
END
------------------------
SELECT * FROM dbo.stu_hage(22)
 

sno sname ssex sage sdept 1005 陈宇 男 23 C3 1008 王晓 女 23 C3

 

sno sname ssex sage sdept
1001 张三 .. .. ..
1004 陈旭 .. .. ..
1006 王五 .. .. ..
1009 张斌 .. .. ..

你可能感兴趣的:(SQLServer)