如何使用UDF Scalar函数打印字母?

时间:2017-02-10 04:59:30

标签: sql sql-server function user-defined-functions

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

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

3 个答案:

答案 0 :(得分:2)

无需循环功能。只需从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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

尝试:您可以使用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]()