SQL Server 表值函数与标量值函数详解
本文详解 SQL Server 中表值函数与标量值函数的写法与应用。简单逻辑使用内联表值函数直接返回结果集,复杂计算需定义表变量填充数据;调用标量值函数需加 dbo 前缀避免报错。文章提供核心代码示例与参数传递技巧,帮助开发者高效实现数据封装与复用。
表值函数:从简单筛选到复杂计算
表值函数(Table-Valued Function)主要用于处理数据并返回一个结果集。与视图不同,表值函数可以接受参数,从而实现更灵活的数据过滤和逻辑判断。根据内部逻辑的复杂度,表值函数主要分为两种写法:
第1步:无复杂逻辑——创建内联表值函数
目的:适用于简单的查询过滤,无需定义变量或进行复杂的条件分支判断。
操作:使用 RETURNS TABLE 语法,直接在 RETURN 子句中编写 SELECT 语句。
示例代码:
CREATE FUNCTION Fun_GetReportNews(@type varchar(10))
RETURNS TABLE
AS
RETURN
(
SELECT TPR_ID,TPR_Title,TPR_Date FROM TP_ReportNews WHERE TPR_Type = @type
)
调用方式:直接将其视为一张表进行查询。
SELECT * FROM Fun_GetReportNews('xx')
第2步:有复杂逻辑——创建多声明表值函数
目的:当需要在函数体内进行变量定义、IF 判断或多表关联计算时,必须使用此类型。
注意:函数体内不允许创建临时表(如 #Temp),只能使用表变量(Table Variable)。
入口:在 RETURNS 后显式定义表结构。
示例代码:
CREATE FUNCTION FUN_GetInfoList(@type varchar(10))
RETURNS @Table TABLE(TPR_ID int,TPR_Title nvarchar(100),TPR_PubDate datetime)
AS
BEGIN
-- 1. 定义局部变量
DECLARE @a varchar(10)
-- 2. 赋值与逻辑判断
SELECT @a = xx FROM XX WHERE xx = @type
-- 3. 向表变量插入数据
INSERT @Table
SELECT XX,XX,XX FROM TableName WHERE XX = @a
-- 注意:INSERT 时的列数和取值列数必须一致
RETURN
END
在处理多表关联时,可以在函数体内先定义表变量存放中间结果,再进行后续的关联查询。
标量值函数:返回单一数值
标量值函数(Scalar Valued Function)用于返回单个数据类型(如字符串、日期等),常用于数据格式化或简单的计算。
第3步:编写与调用规范
目的:对输入参数进行处理后返回一个具体的值。
风险提醒:调用标量值函数时,必须在函数名前加上架构名 dbo,否则 SQL Server 会将其误认为系统内置函数而报错。
示例代码:
CREATE FUNCTION FUN_DataFormat (@strDate datetime)
RETURNS varchar(20)
AS
BEGIN
declare @date varchar(20)
set @date = DATENAME(YY,@strDate)+'年'+Convert(VARCHAR,MONTH(@strDate))+'月'+Convert(VARCHAR,DAY(@strDate))+'日'
return @date
END
测试调用:
select dbo.FUN_DataFormat(getdate())
总结
掌握 SQL Server 函数的关键在于区分使用场景。简单筛选优先选择内联表值函数以保持性能;涉及复杂逻辑时利用表变量构建多声明表值函数;日常数据处理中善用标量函数,但务必牢记添加 dbo 前缀的调用规范。以上就是 SQL Server 表值函数与标量值函数的详细内容,更多关于数据库自定义函数的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









