如何使用 UDF 标量函数打印字母表?

How to print Alphabets using UDF Scalar function?

我正在尝试通过创建 UDF 标量函数来打印字母表。 这是我的代码:

create function [dbo].[fnalphabets]()
returns varchar
as begin
declare @num int=65
 while(@num<=90)
 begin
 set @num=@num+1
 end
  return char(@num)
 end

当我使用

调用此函数时
select dbo.fnalphabets()

这不是 returns 预期的结果。谁能告诉我我的代码有什么问题?

试试这个:我在这里更改了它的 return varchar 大小并声明变量来存储字母字符串。并在 while 循环中将 char 值存储在其中。如下和return一样的字母串。

CREATE FUNCTION [dbo].[fnalphabets]()
RETURNS VARCHAR(MAX)
AS BEGIN
  DECLARE @num INT=65
  DECLARE @Alphabates VARCHAR(100)=''
  WHILE(@num<=90)
  BEGIN
    SET @Alphabates=@Alphabates+char(@num)
    SET @num=@num+1
  END
  RETURN @Alphabates
END

试试这个:你可以像下面那样使用Table Valued Functions,它会在不同的行中给你每个A-Z:

CREATE FUNCTION [dbo].[fnalphabets]()
RETURNS @list TABLE (alphabet VARCHAR(10))
BEGIN
    DECLARE @num INT=65
     WHILE(@num<=90)
     BEGIN
        INSERT INTO @list SELECT CHAR(@num)
        SET @num=@num+1
     END

      RETURN
END

SELECT * FROM [dbo].[fnalphabets]()

不需要 LoopFunction 任何东西。只需从 master 数据库中获取 Spt_Values table 的数字并将它们转换为 Char

SELECT CHAR(number)
FROM master.dbo.spt_values
WHERE type = 'p'
    AND NUMBER BETWEEN 65
        AND 90
ORDER BY NUMBER

编辑: 来自评论:上述代码的 UDF

Go
ALTER FUNCTION [dbo].[fnalphabets]()
RETURNS VARCHAR(MAX)
AS BEGIN
    DECLARE @Alphabates VARCHAR(130)='';
    SELECT  @Alphabates = @Alphabates +CHAR(number) +'
    '
    FROM master.dbo.spt_values
    WHERE type = 'p'
    AND NUMBER BETWEEN 65
        AND 90
    ORDER BY NUMBER

    RETURN @Alphabates
END