Пользовательская функция с while l oop на SQL сервере - PullRequest
0 голосов
/ 09 апреля 2020

Меня попросили создать пользовательскую функцию в SQL Сервер, который возвращает следующий шаблон (например, если input = 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 
        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 звезда); Кто-нибудь может указать, как я должен исправить синтаксис?

Заранее спасибо!

1 Ответ

2 голосов
/ 09 апреля 2020

Кажется, вам может потребоваться табличная функция.

Кроме того, по возможности следует избегать циклов

Пример

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
*****
 ****
  ***
   **
    *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...