目录
SQL SERVER的函数是由一个或多个TSQL语句组成的用于实现某种功能的子程序,可以封装实现某功能的TSQL语句组以实现代码的重用。
用户可以根据自己的需求编写自定义函数,而自定义函数根据输出的类型可以分为以下三种:
1. 表量型函数
标量型函数返回的是某种常规的数据类型,如INT、nchar等,但不能是text、ntext、image和timestamp。
CREATE FUNCTION function_name
(<@形参名> <数据类型>[,...n])
RETURNS <返回值数据类型>
AS
BEGIN
<TSQL语句>
RETURN <返回表达式>
END
--函数功能当输入需要查询的产品ID时返回产品名称
GO
CREATE FUNCTION inquire_ProductName
(@Product_ID nvarchar(50))
RETURNS NVARCHAR(255)
AS
BEGIN
DECLARE @ProductName nvarchar(255)
SELECT @ProductName=[产品名称] FROM [产品数据]
WHERE [产品ID]=@Product_ID
RETURN @ProductName
END
2. 内联表值型函数
对于内联表值型函数,没有函数主体,表是单个SELECT语句的结果集,返回的类型是TABLE数据类型(可以理解为返回一个表)
CREATE FUNCTION <function_name>
([<@形参名> <数据类型>[,...n]])
RETURNS TABLE
AS
RETURN(SELECT 查询语句)
--函数功能:提供一个产品ID,返回该产品ID的所有信息
GO
CREATE FUNCTION inquire_AllInfo
(@productId nvarchar(255))
RETURNS TABLE
AS
RETURN(SELECT * FROM [产品数据]
WHERE 产品ID=@productId)
3. 多语句表值型函数
多语句表值型函数,返回的数据类型为表,但是不同于内联表值型函数,返回的表可以再定义,自己定义表的结构,在函数体中将符合条件的数据插入该表并返回。
CREATE FUNCTION <function_name>
([<@形参名> <数据类型>[,...n]])
RETURNS <@返回变量> TABLE(表结构定义)
AS
BEGIN
<TSQL语句>
RETURN
END
--函数功能:输入产品ID返回该产品的所有信息
GO
CREATE FUNCTION inquire_ALLInfomation
(@ProductId nvarchar(255))
RETURNS @tb TABLE(
产品ID NVARCHAR(255),
产品名称 NVARCHAR(255),
子类别 NVARCHAR(255),
类别 NVARCHAR(255)
)
AS
BEGIN
INSERT INTO @tb SELECT * FROM [产品数据]
WHERE [产品ID]=@ProductId
RETURN
END
4.管理用户自定义函数
1. 查看用户自定义函数的TSQL语句
EXEC sp_helptext <function_name>
|EXEC sp_help <function_name>
2. 修改用户定义的函数
将关键字CREATE改为ALTER即可。
3. 删除用户定义函数
DROP FUNCTION <function_name>