微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL SERVER函数之深入表值函数的处理分析

有些情况可能用下表值函数,表值函数主要用于数据计算出来返回结果集,可以带参数(和视图的一个大的区别),如果函数中没有过多的逻辑处理,如变量的定义,判断等,

表值函数返回结果集可以简单向下面这么写:

<div class="codetitle"><a style="CURSOR: pointer" data="49032" class="copybut" id="copybut49032" onclick="doCopy('code49032')"> 代码如下:
<div class="codebody" id="code49032">
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 XX FROM Fun_GetReprotNews('xx')

如果函数中要定义变量,进行判断计算处理什么的,写法有点不一样了,要定义表变量才行,表值函数里是不允许创建临时表的,只能是表变量。
举个简单的写法样式,如下:
<div class="codetitle"><a style="CURSOR: pointer" data="40746" class="copybut" id="copybut40746" onclick="doCopy('code40746')"> 代码如下:
<div class="codebody" id="code40746">
CREATE FUNCTION FUN_GetInfoList(@type varchar(10))
RETURNS @Table TABLE(TPR_ID int,TPR_Title nvarchar(100),TPR_PubDate datetime)
AS
BEGIN
DECLARE @a varchar(10)
SELECT @a = xx FROM XX WHERE xx = @type
INSERT @Table SELECT XX,XX,XX FROM TableName WHERE XX = @a --表变量里定义的列数和取值列数要一致
RETURN
END

如果进行多表操作,可以在函数体内定义表变量来存放结果集再进行关联查询
标量值函数也贴一个样子好了,老掉牙的了,呵呵
<div class="codetitle"><a style="CURSOR: pointer" data="18719" class="copybut" id="copybut18719" onclick="doCopy('code18719')"> 代码如下:
<div class="codebody" id="code18719">
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

访问标量值函数时一般在函数名前加dbo,不然会被认为是系统内置函数,却因又不是系统内置函数而会报错。

上面的可以这么测试

select dbo.FUN_DataFormat(getdate())
就忽悠这些了~

原文地址:https://www.jb51.cc/mssql/63482.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

sql_server表值函数

相关推荐