sql表值函数与标量值函数的区别

光听名字就可以知道区别了喽,创建的方法和整体结构都大体相同,都少不了函数名,函数的形参,返回值等这些

表值函数返回的是一张表结果,就和一个select查询语句一样,只不过里面带入了参数或者很复杂。

标量值函数返回的只是一个值。


一、表值函数(返回一张表结果)

下面是一个带输入参数的表值函数

示例如下:

CREATE function [dbo].[fn_PM_Common_SplitIds](
	@ids varchar(8000),
	@split varchar(1)
)
	returns @idsTable table(sort int,id nvarchar(200))
as 
begin
	declare @x int
	declare @sort int
	declare @tempIds nvarchar(4000)
	
	declare @idLen int
	declare @idValue nvarchar(200)
	
	set @tempIds = ltrim(rtrim(@ids))
	set @sort = 0
	--------------------------------------------------
	--说明:循环@split
	--------------------------------------------------
	set @x = charindex(@split, @tempIds) 
	while(@x>0)
	begin
		set @idLen = LEN(@tempIds)
		set @idValue = substring(@tempIds, 1, @x-1)
		set @tempIds = right(@tempIds, @idLen - @x)
		set @x = charindex(@split, @tempIds) 
		if @idValue <> ''
		begin 
			if not exists(select * from @idsTable where id=@idValue)
			begin
				set @sort = @sort + 1
				insert @idsTable values(@sort,@idValue)
			end
		end 
	end
	--------------------------------------------------
	--说明:就一个id
	--------------------------------------------------
	set @idValue = @tempIds
	if @idValue <> ''
	begin 
		if not exists(select * from @idsTable where id=@idValue)
		begin
			set @sort = @sort + 1
			insert @idsTable values(@sort,@idValue)
		end
	end 
 	return
end

调用这个结果返回的是一张表:

select * from dbo.fn_PM_Common_SplitIds
在这里插入图片描述

二、标量值函数(返回一个具体类型的值)

示例如下:

CREATE FUNCTION [dbo].[UserName] (
      @UserID AS VARCHAR(15)
    )
RETURNS VARCHAR(500)
AS
    BEGIN 
        DECLARE @strRet VARCHAR(500);
        DECLARE @Return VARCHAR(500);

        SELECT  @strRet = UserName
        FROM    Students
        WHERE   ( UserID = @UserID );

        IF @strRet = ''OR @strRet IS NULL
            SET @Return = '';
        ELSE
            SET @Return = @strRet;
        RETURN  @Return;
    END;

调用这个结果返回的是一个值:

select [dbo].[UserName](‘001’) from dbo.Students

三、总结

表值函数和标量值函数都是SQL中的函数,我们一定要学会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值