我正在尝试通过创建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()
它不会返回预期结果。谁能让我知道我的代码有什么问题?
答案 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]()