SQL Server中带有while循环的用户定义函数
我被要求在SQL Server中创建一个用户定义的函数,以返回以下模式(例如,如果输入=5): 这是我的密码:SQL Server中带有while循环的用户定义函数,sql,sql-server,user-defined-functions,Sql,Sql Server,User Defined Functions,我被要求在SQL Server中创建一个用户定义的函数,以返回以下模式(例如,如果输入=5): 这是我的密码: alter function udf_star (@input int) returns varchar (200) as begin declare @star int set @star = @input declare @space int set @space = 0 while @star > 0 begin
alter function udf_star (@input int)
returns varchar (200)
as
begin
declare @star int
set @star = @input
declare @space int
set @space = 0
while @star > 0
begin
declare @string varchar (200)
set @string = replicate (' ', @space) + replicate ('*', @star)
set @star = @star - 1
set @space = @space + 1
end
return @string
end
当我执行函数时
select dbo.udf_star (5)
它只显示
' *'
(4格+1星);有人能指出我应该如何更正语法吗
提前谢谢 您可能需要一个表值函数 此外,应尽可能避免循环 示例
CREATE FUNCTION [dbo].[tvf-Star] (@Input int)
Returns Table
As
Return (
Select Top (@Input)
Stars = replicate(' ',@Input-N)+replicate('*',N)
From ( Select Top (@Input) N=Row_Number() Over (Order By (Select NULL)) From master..spt_values n1 ) A
Order By N Desc
)
如果您愿意:
Select * from [dbo].[tvf-Star](5)
结果
Stars
*****
****
***
**
*
看起来您可能需要一个表值函数 此外,应尽可能避免循环 示例
CREATE FUNCTION [dbo].[tvf-Star] (@Input int)
Returns Table
As
Return (
Select Top (@Input)
Stars = replicate(' ',@Input-N)+replicate('*',N)
From ( Select Top (@Input) N=Row_Number() Over (Order By (Select NULL)) From master..spt_values n1 ) A
Order By N Desc
)
如果您愿意:
Select * from [dbo].[tvf-Star](5)
结果
Stars
*****
****
***
**
*
. .(1) 使用我在前面的答案中建议的递归CTE;(2) 您似乎想要返回一个表,而不是一个标量值。谢谢@GordonLinoff,是的,CTE是一个很好的解决方案,但我正在尝试不同的SQL工具,不知道如何通过UDF实现这一点。(1) 使用我在前面的答案中建议的递归CTE;(2) 您似乎想要返回一个表,而不是一个标量值。谢谢@GordonLinoff,是的,CTE是一个很好的解决方案,但我正在尝试不同的SQL工具,不知道如何通过UDF实现这一点。