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



我正在尝试通过创建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()

它不返回预期结果。 谁能让我知道我的代码出了什么问题?

不需要循环函数任何东西。只需从数据库中获取Spt_Values表中的数字master并将它们转换为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

试试这个: 我在这里更改了它的返回 varchar 大小,并声明变量以存储字母字符串。 并将字符值存储在 while 循环中。 如下所示并返回相同的字母字符串。

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]()

最新更新