博客中用到的数据库脚本文件:https://download.csdn.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')