当前位置:   article > 正文

SQL Server 自定义函数

sql server 自定义函数

用户自定义函数

自定义函数; USER DEFINED FUNCTION
存储过程【PROC】:可以传入参数、传出参数 output、可以返回值,不过该值用于指示成功或失败,而非返回数据
也可以返回结果集,但是在没有将结果集插入到临时某种表(通常是临时表)中以供后面使用的情况下,不能在查询中真正使用他们【返回的结果集不能作为查询使用,如果结果集插入临时表中,临时表可以作为查询中使用】。

自定义函数【UDF】:可以传入参数、但不可以传出参数,输出参数的概念被更为健壮的返回值取代了。
表值函数——>返回一个表
标量值函数——>返回某类型
UDF可以使用内联执行函数,而proc不行,内联执行函数:定义在类体内的成员函数,即该函数体放在类体内。
与存储过程不同,用户自定义函数返回值的目的是提供有意义的数据,而对于存储过程来说,返回值只是说明成功或失败,如果失败,则会提供一些关于失败性质的特定信息
可在查询中内联执行函数(例如,作为select语句的一部分包含它),而使用存储过程则不行

自定义函数包括标量值函数表值函数两种类型,而表值函数又可分为内联表值函数【inline】和多语句表值函数两种类型

标量值函数 定义语法

create function fun_name
( [ { @参数名称 参数类型 [=默认值] }[,…n] ] )
returns Fun_type
[as]
Begin
fun_body
return return_Val
end
if OBJECT_ID(‘自定义函数’,‘IF’) is not null
Drop function 自定义函数;
go
Fun_type:函数返回的类型,该类型不可以是image、text、ntext等数据类型
return return_Val:函数体中必须包括一条返回函数值的 return 语句
OBJECT_ID:判断标量值函数是否存在,若存在则删除。

表值函数 语法

1、create Function FunName(@values float)
returns @tables Table
----表的定义 ,@table 局部变量

编号 int,
名称 char(30),
数量 int,
单价 float

as
----生成表
BEGIN
Insert @tables
select 编号,名称,数量,单价
from 商品库存
where 单价>@values
return
END
2、create Function FunName(@DTstrs varchar(30))
returns Table
as
return
(
SELECT * FROM XXX
WHERE YYY=@DTstrs
); -----分号别忘记
go

调用

select * from FunName(‘hhhh’);

使用CREATE Function 语句创建多语句表值函数,
多语句表值函数是标量值函数内联表值型函数的结合体,该函数的返回值是一个表,可以进行多次查询

create Function Fun_name
([{@参数名称 函数的类型[=默认值]}][,…n])
returns @局部变量 Table --(用于存放该函数返回的表)
<返回表的定义>
[as]
BEGIN
函数体
return
END

create function xxx(@Date datetime)
returns int
as
Begin
return DATEPART(month,@Date)
end;

DATEPART(,) 以整数的形式返回由datepart指定的日期部分

使用create function 语句创建内联表值函数,内联表值型函数也称为单语句表值函数,该函数以表的形式返回一个值,相当于一个参数化的视图
create function Fun_Name
([{@参数名称 函数的类型[=默认值]}[,…n]])
returns Table
[with encryption] —对函数文本进行加密
[as]
return (slect 语句)
if object_id(‘自定义函数’,‘IF’) is not null
drop function 自定义函数
go

Insert into 表 values() --into 可以省略
1、insert into select
insert into table2(field1,field2…) select val1,val2,…from table1 要求目标表table2 必须存在。由于目标表table2已经存在,所以除了插入源表table1的字段外,还可以插入常量
2、select into from
select val1,val2 into Table2 from Table1
要求目标Table2不存在,因为在插入时会自动Table2,并将Table1字段复杂到Table2中

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/737974
推荐阅读
相关标签
  

闽ICP备14008679号