编写了一个函数,用于接受一个Number和一个用户id,并返回一个具有该用户ID的单行中具有单个数字的表。函数创建成功,但当我尝试执行函数时,它返回一个空白表。 附上功能和输出的截图。
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')
答案 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, varchar
或varchar, 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)