数据库—用户自定义函数(基于SQL Server)
博客中用到的数据库脚本文件:https://download..net/download/sunshine543123/12087175
(1) 创建标量型自定义函数 ① 建立一个求阶乘的函数“F1_自定义函数”。 ② 调用该函数计算5!*3!-6!
go create function F_自定义函数(@i int) returns int begin declare @resu int,@n int set @resu=1 if(@i<0) set @resu=0 else if(@i<2) set @resu=1 else begin while(@i>1) begin set @resu=@resu*@i set @i=@i-1 end end return @resu end go select dbo.F_自定义函数(5)*dbo.F_自定义函数(3)-dbo.F_自定义函数(6)
(2) 在COMPANY数据库中,创建一个自定义标量函数,用来返回某个部门(传入参数为“部门名称”)的员工数。
go CREATE FUNCTION F2_dept_count(@dname varchar(20)) RETURNS int AS BEGIN declare @result int select @result=COUNT(*) from Employee e,Department d where d.DNAME=@dname and e.DNO=d.DNUMBER return (@result) END go select dbo.f2_dept_count(headquarters)
(3) 在COMPANY数据库中,创建一个自定义内嵌表值函数,用来返回某个部门(传入参数为“部门名称”)的所有员工的姓名、性别、SSN和年龄信息。
go CREATE FUNCTION F3_dept_emp(@dname varchar(20)) RETURNS TABLE AS RETURN( SELECT fname,lname,sex,ssn,DATEDIFF(year,bdate,GETDATE()) as age from Employee e join Department d on e.DNO=d.DNUMBER WHERE dname=@dname) go select * from dbo.f3_dept_emp(administration)
(4)在COMPANY数据库中,创建一个自定义多语句表值函数,用来返回参加过某个项目(传入参数为“项目名称”)的员工的“FNAME”、“SALARY”和年龄信息(要求将“FNAME”转换成大写字母)
go CREATE FUNCTION F_PROJECT_EMP(@PNAME VARCHAR(30)) RETURNS @PEMP TABLE( FNAME varchar(30), SALARY INT, AGE INT ) AS BEGIN INSERT @PEMP SELECT UPPER(FNAME),SALARY,DATEDIFF(YEAR,BDATE,GETDATE()) FROM Employee E JOIN WORKS_ON W ON E.SSN=W.ESSN JOIN Project P ON W.PNO=P.PNUMBER WHERE PNAME=@PNAME RETURN END go SELECT * FROM DBO.F_PROJECT_EMP(PRODUCTY)
下一篇:
SSM框架之MyBatis的增删改查