有些情况可能用下表值函数,表值函数主要用于数据计算出来返回结果集,可以带参数(和视图的一个大的区别),如果函数中没有过多的逻辑处理,如变量的定义,判断等,
表值函数返回结果集可以简单向下面这么写:
如果函数中要定义变量,进行判断计算处理什么的,写法有点不一样了,要定义表变量才行,表值函数里是不允许创建临时表的,只能是表变量。
举个简单的写法样式,如下:
如果进行多表操作,可以在函数体内定义表变量来存放结果集再进行关联查询。
标量值函数也贴一个样子好了,老掉牙的了,呵呵~~
访问标量值函数时一般在函数名前加dbo,不然会被认为是系统内置函数,却因又不是系统内置函数而会报错。
上面的可以这么测试
select dbo.FUN_DataFormat(getdate())
就忽悠这些了~~~~~~~
表变量和临时表的区别及函数和存储过程的区别,大伙可以在博客园上博一把,有很多说明文章比较详细的了。
表值函数返回结果集可以简单向下面这么写:
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')
RETURNS TABLE
AS
RETURN
(
SELECT TPR_ID,TPR_Title,TPR_Date FROM TP_ReportNews WHERE TPR_Type = @type
)
如果函数中要定义变量,进行判断计算处理什么的,写法有点不一样了,要定义表变量才行,表值函数里是不允许创建临时表的,只能是表变量。
举个简单的写法样式,如下:
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
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
如果进行多表操作,可以在函数体内定义表变量来存放结果集再进行关联查询。
标量值函数也贴一个样子好了,老掉牙的了,呵呵~~
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
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())
就忽悠这些了~~~~~~~
表变量和临时表的区别及函数和存储过程的区别,大伙可以在博客园上博一把,有很多说明文章比较详细的了。