sql server 自定义函数

本文介绍了SQL Server中的用户定义自定义函数,包括标量函数和表格值函数。标量函数用于返回一个标量值,而表格值函数则返回行集。通过示例详细讲解了如何创建和使用这两种类型的函数,并提供了执行和引用用户自定义函数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义函数

 

用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回

用户自定义函数的类型:

标量函数:返回一个标量值

表格值函数{内联表格值函数、多表格值函数}:返回行集(即返回多个值)

1、标量函数

Create function 函数名(参数)

Returns 返回值数据类型

[with {Encryption | Schemabinding }]

[as]

begin

SQL语句(必须有return 变量或值)

End

Schemabinding :将函数绑定到它引用的对象上(注:函数一旦绑定,则不能删除、修改,除非删除绑定)

Create function AvgResult(@scode varchar(10))

Returns real

As

Begin

   Declare @avg real

   Declare @code varchar(11)

   Set @code=@scode + ‘%’

   Select @avg=avg(result) from LearnResult_baijiali

Where scode like @code

Return @avg

End

执行用户自定义函数

select 用户名。函数名 as 字段别名

select dbo.AvgResult(‘s0002’) as result

用户自定义函数返回值可放到局部变量中,用set ,select,exec赋值

declare @avg1 real ,@avg2 real ,@avg3 real

select @avg1= dbo.AvgResult(‘s0002’)

set @avg2= dbo.AvgResult(‘s0002’)

exec @avg3= dbo.AvgResult ‘s0002’

select @avg1 as avg1 ,@avg2 as avg2 ,@avg3 as avg3

函数引用

create function code(@scode varchar(10))

returns varchar(10)

as

begin

declare @ccode varchar(10)

set @scode = @scode + ‘%’

select @ccode=ccode from cmessage

   where ccode like @scode

return @ccode

end

select name from class where ccode = dbo.code(‘c001’)

2、表格值函数

a、 内联表格值函数

格式:

create function 函数名(参数)

returns table

[with {Encryption | Schemabinding }]

as

return(一条SQL语句)

create function tabcmess(@code varchar(10))

returns table

as

return(select ccode,scode from cmessage where ccode like @ccode)

b、 多句表格值函数

   create function 函数名(参数)

   returns 表格变量名table (表格变量定义)

   [with {Encryption | Schemabinding }]

as

   begin

    SQL语句

   end

多句表格值函数包含多条SQL语句,至少有一条在表格变量中填上数据值

表格变量格式

returns @变量名 table (column 定义| 约束定义 [,…])

对表格变量中的行可执行select,insert,update,delete 但select into 和 insert 语句的结果集是从存储过程插入。

Create function tabcmessalot (@code varchar(10))

Returns @ctable table(code varchar(10) null,cname varchar(100) null)

As

Begin

Insert @ctable

Select ccode,explain from cmessage

Where scode like @code

return

End

Select * from tabcmessalot(‘s0003’)

将存储过程转变成函数

### 创建和使用 SQL Server 自定义函数SQL Server 中,用户可以通过自定义函数(User-Defined Functions,简称 UDF)来封装业务逻辑、执行计算或返回复杂的数据集。SQL Server 支持两种主要类型的自定义函数:**标量值函数** 和 **表值函数**。 #### 标量值函数 标量值函数用于返回一个单一值,通常用于数据转换、逻辑判断等场景。创建标量值函数时需要指定输入参数、返回值类型以及函数体逻辑。 以下是一个创建标量值函数的示例,该函数用于返回某个产品的折扣后价格: ```sql CREATE FUNCTION dbo.CalculateDiscountedPrice ( @OriginalPrice DECIMAL(10, 2), @DiscountRate DECIMAL(5, 2) ) RETURNS DECIMAL(10, 2) AS BEGIN DECLARE @DiscountedPrice DECIMAL(10, 2); SET @DiscountedPrice = @OriginalPrice * (1 - @DiscountRate / 100); RETURN @DiscountedPrice; END ``` 调用该函数的方式如下: ```sql SELECT dbo.CalculateDiscountedPrice(100.00, 10) AS DiscountedPrice; ``` 此函数可以嵌入到查询中,用于动态计算字段值[^2]。 #### 表值函数 表值函数用于返回一个表,适用于封装复杂的查询逻辑并以函数形式复用。其结构类似于视图,但支持传参,灵活性更高。 以下是一个内联表值函数的示例,该函数返回特定类别下的产品列表: ```sql CREATE FUNCTION dbo.GetProductsByCategory ( @CategoryID INT ) RETURNS TABLE AS RETURN ( SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = @CategoryID ); ``` 调用该函数的方式如下: ```sql SELECT * FROM dbo.GetProductsByCategory(1); ``` 该函数可用于 JOIN 操作或其他子查询中,提升代码复用性和可维护性[^1]。 #### 修改与删除函数 若需修改已存在的函数,可以使用 `ALTER FUNCTION` 语句进行更新。例如: ```sql ALTER FUNCTION dbo.CalculateDiscountedPrice ( @OriginalPrice DECIMAL(10, 2), @DiscountRate DECIMAL(5, 2) ) RETURNS DECIMAL(10, 2) AS BEGIN DECLARE @DiscountedPrice DECIMAL(10, 2); SET @DiscountedPrice = @OriginalPrice * (1 - @DiscountRate / 100) * 0.95; -- 新增额外折扣 RETURN @DiscountedPrice; END ``` 若不再需要某个函数,可以直接使用 `DROP FUNCTION` 删除: ```sql DROP FUNCTION dbo.CalculateDiscountedPrice; ``` #### 函数的使用注意事项 - 函数应避免包含副作用操作(如修改数据库状态),否则可能导致不可预期的结果。 - 在性能敏感的场景下,应谨慎使用多语句表值函数,因其可能影响查询效率。 - 函数的命名应具有描述性,便于后续维护和理解。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值