光听名字就可以知道区别了喽,创建的方法和整体结构都大体相同,都少不了函数名,函数的形参,返回值等这些
表值函数返回的是一张表结果,就和一个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中的函数,我们一定要学会。