SQL Server进阶(十二)函数
概述

- 函数有且只有一个输入参数和一个返回值,而存储过程没有这个限制;
- 返回表变量的函数可以当做VIEW或者临时表用在WHERE/HAVING/SELECT/JOIN语句中而存储过程不可以;
- 存储过程中可以使用try-catch块和事务,而函数中不可以
表值函数
表值函数主要用于数据计算出来返回结果集,可以带参数(和视图的一个大的区别)
用户定义表值函数返回 table 数据类型,表是单个 SELECT 语句的结果集。
创建
CREATE FUNCTION Fun_GetStudents ( @age INT )--参数
RETURNS TABLE --返回类型为表
AS
RETURN
( SELECT *
FROM dbo.Student
WHERE Sage = @age --通过一条sql查询语句获取表中数据
);
调用
SELECT * FROM Fun_GetStudents(18);
注意:
(1)只能返回Table,returns后边一定是table
(2)as后面没有begin/end,只有一个return语句返回特定的记录
标量值函数
创建
CREATE FUNCTION [dbo].[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())
注意:
(1)必须使用两部分组成函数的名字来调用函数,即所有者.对象名,如dbo.F3_GetMax(2,3)
(2)所有的传入参数前必须加@
(3)不要写漏和写错关键字,如as,returns,return
(4)returns后面不是跟一个变量,而是跟变量的返回值类型
(5)在begin/end语句块中,使用的是return
聚合函数
常见的几个聚合函数
1、 求个数:count
2、 求总和:sum
3、 求最大值:max
4、 求最小值:min
5、 求平均值:avg
系统函数

sql中的表值函数与标量值函数区别与用法
通俗来讲:听名字就知道区别了
表值函数返回的是一张表结果,就和一个select查询语句一样,只不过里面带入了参数或者很复杂;
标量值函数返回的只是一个值
一 、表值函数又分为内联函数与多语句函数
(1)内联函数就是没有函数主体表是单个 SELECT。
下面是一个不带输入参数的表值函数
create function tvpoints()
returns table
as
return
(
select * from tb_users
);
(2)下面是带参的内联表值函数
对于多语句表值函数,在 BEGIN...END 语句块中定义的函数体包含一系列 Transact-SQL 语句,这些语句可生成行并将其插入将返回的表中。
以下示例创建了一个表值函数.
create function tvpoints()
returns @points table (x float, y float)
as begin
insert @points values(1,2);
insert @points values(3,4);
return;
end
(3)标量函数(返回一个具体类型的值而不是一张表了)
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())来使用。(用的时候一定要在函数前面添加一个dbo或者的话数据库语句报错的会提示不认识的)
在SQL 2012基础教程中列出子句是按照以下顺序进行逻辑处理
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
IF EXISTS (SELECT 1 FROM TableName WHERE UserCode = @UserCode)
BEGIN
UPDATE TableName
SET NotPushBeginTime = @NotPushBeginTime,
NotPushEndTime = @NotPushEndTime
WHERE UserCode = @UserCode
END
ELSE
BEGIN
INSERT INTO TableName
(UserCode,
NotPushBeginTime,
NotPushEndTime,
CreateTime)
VALUES (@UserCode,
@NotPushBeginTime,
@NotPushEndTime,
Getdate())
END
资料
https://blog.csdn.net/lvyanqin2013/article/details/78721239
SQL Server进阶(十二)函数的更多相关文章
- SQL Server进阶(二)字段类型
		概述 系统数据类型详情 SqlDbType namespace System.Data { // // 摘要: // 指定要用于 System.Data.SqlClient.SqlParameter ... 
- SQL Server 进制转换函数
		一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ... 
- SQL Server 进阶 01 数据库的设计
		SQL Server 进阶 01 数据库的设计 本篇目录 课程内容回顾及介绍 为什么需要规范的数据库设计 设计数据库的步骤 绘制E-R(实体-关系)图 实体-关系模型 如何将E-R图转换为表 数据规范 ... 
- SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
		原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之 ... 
- 【目录】sql server 进阶篇系列
		随笔分类 - sql server 进阶篇系列 sql server 下载安装标记 摘要: SQL Server 2017 的各版本和支持的功能 https://docs.microsoft.com/ ... 
- sql server 2012  自定义聚合函数(MAX_O3_8HOUR_ND)  计算最大的臭氧8小时滑动平均值
		采用c#开发dll,并添加到sql server 中. 具体代码,可以用visual studio的向导生成模板. using System; using System.Collections; us ... 
- ylb:SQL Server中的时间函数
		ylbtech-SQL Server:SQL Server-SQL Server中的时间函数 SQL Server中的时间函数. 1,SQL Server中的时间函数 返回顶部 1. 当前系统日期 ... 
- SQL Server中的DATEPART函数的使用
		下面文章来自:http://blog.csdn.net/hello_world_wusu/article/details/4632049 定义和用法 DATEPART() 函数用于返回日期/时间的单独 ... 
- 刷新SQL Server所有视图、函数、存储过程
		刷新SQL Server所有视图.函数.存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ... 
- 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。  [SQL]代码  --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR  --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO
		刷新SQL Server所有视图.函数.存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ... 
随机推荐
- 【WC2018】即时战略(动态点分治,替罪羊树)
			[WC2018]即时战略(动态点分治,替罪羊树) 题面 UOJ 题解 其实这题我也不知道应该怎么确定他到底用了啥.只是想法很类似就写上了QwQ. 首先链的部分都告诉你要特殊处理那就没有办法只能特殊处理 ... 
- THUSC2017题解
			THUSC2017题解 题目都是在LOJ上交的. chocolate LOJ#2977巧克力 这题看着就让人想起了百度之星复赛的\(T5\),就是这题. 因为种类的个数很多,所以把每个种类随意\(ra ... 
- cf1073D Berland Fair (二分答案+树状数组)
			用一个树状数组维护前缀和,每次我二分地找一个位置,使得我能一路买过去 但这个买不了 那以后肯定也都买不了了,就把它改成0,再从头二分地找下一个位置,直到这一圈我可以跑下来 然后就看跑这一圈要花多少钱. ... 
- Python3 与 C# 基础语法对比(String专栏)
			Code:https://github.com/lotapp/BaseCode 多图旧排版:https://www.cnblogs.com/dunitian/p/9119986.html 在线编程 ... 
- A1136. Delayed Palindrome
			Consider a positive integer N written in standard notation with k+1 digits ai as ak⋯a1a0 ... 
- ImageMagick - 智能的灰度空间(GRAYColorspace)让人窒息
			今天在处理一张 gray.jpg 图片时,发现生成的图片色彩空间是: GRAYColorspace 可我在代码中明明设置了: MagickWand * mw = NewMagickWand (); M ... 
- '新', '泽' - ImageMagick - UTF-8非最短形式及编码安全问题
			最近偶然发现,把软件放到 [新建文件夹] 中,ImageMagick 竟无法正常的加载图片了. 我去!什么情况? 抛出的错误是找不到相关的dll,软件中已对中文进行了utf-8编码,这几年来一直没发 ... 
- JavaScript(JS)之Javascript对象DOM(三)
			https://www.cnblogs.com/haiyan123/p/7598320.html 一.什么是HTML DOM HTML Document Object Model(文档对象模型) ... 
- 第三十一篇-TextInputLayout(增强文本输入)的使用
			效果图: 密码使用的是增强文本输入类型,当密码长度小于6或者密码长度大于10的时候就会给出提示. main.xml 当添加TextInputLayout时,旁边会有一个下载符号,如果点不动,可以右键点 ... 
- FFT的一种迭代实现
			struct Complex { double x,y; Complex(double x1=0.0 ,double y1=0.0) { x=x1; y=y1; } Complex operator ... 
