sql 表值函数与标量值函数

写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量值函数可以返回基类型。

举个例子,当用户删除一个节点的时候,是需要将当前节点下的所有子节点都删掉,如果程序只传一个当前节点,那就需要写一个函数来得到当前节点下的所有子节点,这些子节点的信息就可以放到一个表中返回。

ALTER FUNCTION testGetSubNodes

(

-- Add the parameters for the function here

@nodeId int

)

RETURNS

@t TABLE

(

-- Add the column definitions for the TABLE variable here

id bigint identity(1,1) not null,

nodeIds int ,

nodeName varchar(500)

)

AS

BEGIN

-- Fill the table variable with the rows for your result set

insert into @t values(@nodeId,‘header‘);

while exists(

select nodeid from dbo.Tree where parentid

in (select nodeIds from @t) and nodeid not in(select nodeIds from @t))

begin

insert into @t select nodeid, nodename from dbo.Tree where parentid

in (select nodeIds from @t)

end

RETURN

END

这个函数的主要功能就是返回当前节点下的所有子节点,在存储过程中写

select * from testGetSubNodes(nodeId)就可以返回表中的数据了。

再写一个标量值函数

ALTER FUNCTION [dbo].[testGetSubNodes_]

(

@nodeId int

)

RETURNS int

AS

BEGIN

declare @nodeCount int

select @nodeCount=5 from MenuTree

return @nodeCount

END

这个函数很简单返回一个整型值,然后就可以在存储过程中调用了,不过调用的方式有所不同,象上面的表值函数调用是不需要所有者的,只要写函数名称就可以,对于标量值函数来说,是需要加上所有者的,比如所有者是dbo

select dbo.testGetSubNodes_,这样就可以返回5,如果不加dbo,那sql会不认识这个函数。

Sql server 的表值函数是返回一个Table类型,table类型相当与一张存储在内存中的一张虚拟表。

实现表值函数很简单:
下面是一个不带输入参数的表值函数

?

create function tvpoints()

returns table

as

return

(

select *from tb_users

);

这个表值函数数查询所有用户表的数据

对于多语句表值函数,在 BEGIN...END 语句块中定义的函数体包含一系列 Transact-SQL 语句,

这些语句可生成行并将其插入将返回的表中。

以下示例创建了一个表值函数.

?

create function tvpoints()

returns @pointstable (xfloat,
y
float)

as begin

insert @pointsvalues(1,2);

insert @pointsvalues(3,4);

return;

end

查询表值函数跟查询普通表一样
select * from tvpoints()
返回的是一张表

带输入参数的表值函数

?

create function tvpoints2(@xAS int,@yas int)

returns @pointstable (xfloat,
y
float)

as begin

insert @pointsvalues(@x,@y);

return;

end

时间: 2024-12-13 20:19:29

sql 表值函数与标量值函数的相关文章

SQL表值函数和标量值函数的区别

写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量值函数可以返回基类型.举个例子,当用户删除一个节点的时候,是需要将当前节点下的所有子节点都删掉,如果程序只传一个当前节点,那就需要写一个函数来得到当前节点下的所有子节点,这些子节点的信息就可以放到一个表中返回. ALTER FUNCTION testGetSubNodes ( @nodeId int

sql中的表值函数与标量值函数区别与用法

通俗来讲: 听名字就知道区别了 表值函数返回的是一张表结果,就和一个select查询语句一样,只不过里面带入了参数或者很复杂:标量值函数返回的只是一个值 一 .表值函数又分为内联函数与多语句函数 (1)内联函数就是没有函数主体表是单个 SELECT. 下面是一个不带输入参数的表值函数 create function tvpoints() returns table as return ( select * from tb_users ); 调用-这个结果返回的是一张表: select * fro

sqlserver中的表值函数和标量值函数

顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 一.表值函数 用户定义表值函数返回 table 数据类型.对于内联表值函数,没有函数主体:表是单个 SELECT 语句的结果集. 以下示例创建了一个内联表值函数.此函数的输入参数为客户(商店)ID,而返回 ProductID.Name 以及 YTD Total(销售到商店的每种产品的本年度节截止到现在的销售总额)列. USE AdventureWorks; GO CREATE FUNCTION Sales.fn_SalesByStore

(转)表值函数,标量值函数详解

顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 表值函数 用户定义表值函数返回 table 数据类型.对于内联表值函数,没有函数主体:表是单个 SELECT 语句的结果集. 以下示例创建了一个内联表值函数.此函数的输入参数为客户(商店)ID,而返回 ProductID.Name 以及 YTD Total(销售到商店的每种产品的本年度节截止到现在的销售总额)列. USE AdventureWorks; GO CREATE FUNCTION Sales.fn_SalesByStore (@

数据库创建标量值函数

1 create FUNCTION [dbo].[ispm] (@pmfrist int) 2 RETURNS int 3 AS 4 BEGIN 5 DECLARE @ISvalue int 6 if @pmfrist>0 and @pmfrist<11 7 begin 8 set @ISvalue=1 9 end 10 else 11 begin 12 set @ISvalue=0 13 end 14 RETURN(@ISvalue) 15 END 16 17 数据库创建标量值函数

表值函数,标量值函数

表值函数:ALTER FUNCTION getTable( )RETURNS TABLE ASRETURN ( select * from tb)取值:select * from getTable( )标量函数:ALTER FUNCTION [dbo].[CamOnlineAverage]   (      @projId INT ,      @startDate DATETIME ,      @endDate DATETIME    )RETURNS  Float ASBegin    

SQL标量值函数:小写金额转大写

我们日常开发业务系统中,作为统计报表中,特别是财务报表,显示中文金额经常遇到. 转换大小写的方法有很多,以下是从数据库函数方面解决这一问题. 效果如图: 调用:SELECT dbo.[Fn_ConvertRMB](192.4) 具体函数如下: -- ============================================= -- 调用:SELECT dbo.[Fn_ConvertRMB](192.4) -- Create date: 2015-01-06 -- Descripti

SQL标量值函数:返回汉字拼音首拼

今天遇到一个需求,客户要求在系统客户端选择客户的时候,可以用拼音首拼去快速过滤选择,此时我们在客户表里面加多一个拼音首拼字段CustPY来记录,字段加好了,我们要把所有客户名称的拼音简拼都更新到CustPY字段中. 为此利用以下函数做了个批量更新 执行语句:UPDATE  客户表 SET  CustPY=dbo.[Fn_GetPinYin](客户名称字段) 这样就可以了.需要注意的是:多音字.例如 SELECT dbo.[Fn_GetPinYin]('重庆') 返回ZQ    谨此记录. --

sql标量值函数,将汉字转化为拼音,无音标

USE [db_Test]GO SET ANSI_NULLS ONGO SET QUOTED_IDENTIFIER ONGO create function [dbo].[fn_GetPinyin](@words nvarchar(2000)) returns varchar(8000) as begin declare @word nchar(1) declare @pinyin varchar(8000) declare @i int declare @words_len int decla