每个人都很忙,但是花10分钟复习下,总结下基础东西还是很有益处的。

背景:

  总结一句,使用简便,还能递归,是的SQL更简洁,相对比一大堆的关联语句,而且关联一大堆还不一定实现特定功能。而且共用部分可以提取出来,提高复用性,这是有代码洁癖的人没法接受的,所以总会重构代码,。。扯偏了

创建:

(图片来自百度)

自定义函数分为以下几种:

1.标量值函数:

案例脚本:

  

CREATE FUNCTION Func_CreateGroup(@Id int)
RETURNS varchar(4)
AS
BEGIN
RETURN
CASE
WHEN @Id<=5 THEN '小'
WHEN 10000<=@Id AND @Id>5 THEN '中'
END
END

  使用:

SELECT dbo.Func_CreateGroup(Id),MemberName FROM dbo.MemberInfo

  这里有一个注意点:标量函数前面的dbo必须加上,否则提示错误:'Func_CreateGroup' 不是可以识别的 内置函数名称。

查询结果:

2.内嵌表值型函数:

语法:

参考脚本:

CREATE FUNCTION Func_Table(@Id int)
RETURNS table
AS
RETURN SELECT * FROM dbo.MemberInfo WHERE Id>@Id
GO

  使用参考:

SELECT * FROM Func_Table(500)

  这里要注意一个细节,在标量值函数中,有一个前缀dbo.必须加上,而内嵌表值型 函数可以不用加上(加上也没错),这是一个区别,另外上面忘记说了,注意第二行的单词拼写,是returns 不要写成return了,然后下面的脚本就像写存储过程一样,直接在as下面写具体的业务实现。

3.多语句表值型函数

多语句表值型函数是标量函数和单语句函数的结合体,该函数返回的是一个表,可以进行多次查询。

参考语法:

参考脚本:

CREATE FUNCTION Func_MuilSqlTable(@Id int)
RETURNS @table TABLE
(
Id int ,
MemberName varchar(20),
UpdateTime datetime
) AS
BEGIN
INSERT @table
SELECT Id,MemberName,UpdateTime FROM dbo.MemberInfo
WHERE id=@Id
RETURN
END

使用参考:

SELECT * FROM dbo.Func_MuilSqlTable(1)

案例执行结果:

这里有个细节要注意,写法和上面的内嵌表值型函数相似,但是在returns处,多了一个表变量 @table table以及要返回的字段(使用小括号括起来),然后是AS的内容,但是在最后要注意一下,有一个  return(蓝色部分),否则报错 函数中最后一条语句必须是返回语句,其次就是,dbo.的前缀。

SQL SERVER 高级编程 - 自定义函数 拾忆的更多相关文章

  1. SQL Server中建立自定义函数

    在SQL Server中用户可以自定义函数,像内置函数一样返回标量值,也可以将结果集用表格变量返回.用户自定义函数的2种类型:1.标量函数:返回一个标量值:2.表格值函数{内联表格值函数.多表格值函数 ...

  2. Sql Server系列:自定义函数

    用户自定义函数可以像系统函数一样在查询或存储过程中调用,可以接受参数.执行操作并将操作结果以值的形式返回.返回值可以是单个标量或结果集. 1. 标量函数 标量函数返回一个确定类型的标量值,对于多语句的 ...

  3. SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

    原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之 ...

  4. SQL Server如何定位自定义标量函数被那个SQL调用次数最多浅析

    前阵子遇到一个很是棘手的问题,监控系统DPA发现某个自定义标量函数被调用的次数非常高,高到一个离谱的程度.然后在Troubleshooting这个问题的时候,确实遇到了一些问题让我很是纠结,下文是解决 ...

  5. SQL Server 进制转换函数

    一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...

  6. ylb:SQL Server中的时间函数

    ylbtech-SQL Server:SQL Server-SQL Server中的时间函数 SQL Server中的时间函数. 1,SQL Server中的时间函数 返回顶部 1.   当前系统日期 ...

  7. SQL Server中的DATEPART函数的使用

    下面文章来自:http://blog.csdn.net/hello_world_wusu/article/details/4632049 定义和用法 DATEPART() 函数用于返回日期/时间的单独 ...

  8. 刷新SQL Server所有视图、函数、存储过程

    刷新SQL Server所有视图.函数.存储过程 更多   sql   此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...

  9. 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO

    刷新SQL Server所有视图.函数.存储过程 更多   sql   此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...

随机推荐

  1. POJ_3176_Cow_Bowling_(数字三角形)_(动态规划)

    描述 http://poj.org/problem?id=3176 给出一个三角形,每个点可以走到它下面两个点,将所有经过的点的值加起来,问最大的和是多少. Cow Bowling Time Limi ...

  2. 搜索(DLX重复覆盖模板):HDU 2295 Radar

    Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. Web性能测试基本性能指标

    Web性能测试的部分概况一般来说,一个Web请求的处理包括以下步骤: (1)客户发送请求 (2)web server接受到请求,进行处理: (3)web server向DB获取数据: (4)webse ...

  4. bzoj 1027 [JSOI2007]合金(计算几何+floyd最小环)

    1027: [JSOI2007]合金 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 2970  Solved: 787[Submit][Status][ ...

  5. vmware下linux 如何添加硬盘

    1.在虚拟机的设置中增加一块硬盘.   setting -> add disk -> create a new virtual disk -> SCSI   设定大小,这里给3G:更 ...

  6. python中类的继承

    python中类的继承 在python中面向对象编程中实现继承,以下面一个实例进行说明. class SchoolMenber(): # __init__类似于c++中的构造函数 # __init__ ...

  7. Yii 打造带有缓存功能的AR

    继承AR类 重写 findByPk方法为pk  还有afterSave afterDelete 通过对象主键缓存其属性  在insert update delete 操作时候 都会自动更新缓存还是挺方 ...

  8. 【ImageMagick】Unix Windows 源码安装

    [ Unix 源码安装 | Windows 源码安装 ] 首先检查一下电脑里已经安装的ImageMagick版本,输入:   convert -version 除非你想要把对另外的图像格式的支持或升级 ...

  9. 关于css命名规范

    1 newsHeader-logo,第一个单词小写,第二个单词大写,第三个单词加-

  10. 在code.org上自己写一个flappy bird游戏

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在code.org上自己写一个flappy bird游戏.