数据库—用户自定义函数(基于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)
经验分享 程序员 微信小程序 职场和发展