sql函数没有返回值

时间:2018-02-07 09:04:58

标签: sql-server tsql

编写了一个函数,用于接受一个Number和一个用户id,并返回一个具有该用户ID的单行中具有单个数字的表。函数创建成功,但当我尝试执行函数时,它返回一个空白表。 附上功能和输出的截图。

enter image description here

Create Function ExtractingDigits(@InputNumber INT, @UserId varchar)
    RETURNS @ReturnTable Table(UserId Varchar(20),  ModNumber Int)
as
begin
Declare @ModNumber Int
While @InputNumber!=0
begin
set @ModNumber= @InputNumber%10
set @InputNumber=@InputNumber/10
insert into @ReturnTable(UserId, ModNumber)
select * from @ReturnTable
end
return
end

select * from ExtractingDigits(123, 'as')

1 个答案:

答案 0 :(得分:0)

修复方法是为VALUES使用INSERT子句而不是空表中的SELECT

alter Function ExtractingDigits(@InputNumber INT, @UserId varchar)
    RETURNS @ReturnTable Table(UserId Varchar(20),  ModNumber Int)
as
begin
Declare @ModNumber Int
While @InputNumber!=0
begin
set @ModNumber= @InputNumber%10
set @InputNumber=@InputNumber/10
insert into @ReturnTable(UserId, ModNumber)
values (@UserId,@ModNumber)
end
return
end
go
select * from ExtractingDigits(123, 'as')

就像样式评论一样,我也建议a)更改参数顺序或表格定义,使它们一致(即同时为int, varcharvarchar, int而不是交换)但b)建议不要在此功能中包括@UserId。这将使该功能更加一般可用:

alter Function ExtractingDigits(@InputNumber INT)
    RETURNS @ReturnTable Table(ModNumber Int)
as
begin
Declare @ModNumber Int
While @InputNumber!=0
begin
set @ModNumber= @InputNumber%10
set @InputNumber=@InputNumber/10
insert into @ReturnTable(ModNumber)
values (@ModNumber)
end
return
end
go
select * from ExtractingDigits(123) cross apply (select 'as' as UserId)