T-SQL 语句(八)—— 用户自定函数
一、用户自定义函数与储存过程比较
优点:
1、用户定义函数可返回除了text,ntext,image,cursor和timestamp类型之外的所有数据类型,而存储过程只能返回整数值。
2、用户定义函数执行方式灵活,可以通过 EXECUTE 方式执行,也可以用在表达式中并以返回值的方式来取代函数名,而 EXECUTE 来执行。
#####不足:
存储过程可以通过 output 返回数据,而用户定义函数只可以接受参数,不同通过output类型的参数返回值。
存储过程中可以对数据和对象进行修改,而用户定义函数只能对数据进行修改,不能对数据库对象进行修改。
二、创建函数
-- 创建标量函数
CREATE FUNCTION func_getdate()
RETURNS datetime
BEGIN
return getdate()
END
GO
PRINT dbo.func_getdate()
-- 创建内嵌表值函数
CREATE FUNCTION getUserById(@userId INT)
RETURNS TABLE
AS
RETURN (SELECT id,name from users where id=@userId)
GO
select * from dbo.getUserById(1);
-- 创建多声明表值函数
CREATE FUNCTION getEmployee()
RETURNS @tbl TABLE(
id INT NOT NULL,
name NVARCHAR(20)
)
BEGIN
INSERT @tbl(id,name) SELECT id,name FROM employee;
RETURN
END
GO
SELECT * FROM dbo.getEmployee()
GO
DROP FUNCTION getEmployee -- 删除自定义函数
常用自定义函数
CREATE FUNCTION fn_chinese_week_day(@week_day INT) --
RETURNS NVARCHAR(3)
BEGIN
DECLARE @w INT
SET @w = @week_day % 7
RETURN
CASE @w
WHEN 1 THEN '星期一'
WHEN 2 THEN '星期二'
WHEN 3 THEN '星期三'
WHEN 4 THEN '星期四'
WHEN 5 THEN '星期五'
WHEN 6 THEN '星期六'
ELSE '星期天'
END
END