2017-02-10 2 views
1

UDFスカラー関数を作成してアルファベットを印刷しようとしています。 は、ここに私のコードです:UDFスカラ関数を使用してアルファベットを印刷するには?

私は

select dbo.fnalphabets() 

それはしないの戻り期待される結果を使用してこの関数を呼び出しています

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

。誰も私のコードで何が間違っているかを教えてもらえますか?

+0

ための出力Iは、印刷したい –

+0

AからZのアルファベット –

+0

あなたはすべてをループしていますが、関数の最後に1つしか戻っていません! – niksofteng

答えて

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 @[email protected]+char(@num) 
    SET @[email protected]+1 
    END 
    RETURN @Alphabates 
END 
+1

'varchar(MAX)' !?すでに文字列の長さを知っています。 – niksofteng

+0

それはうまく動作しますが、@アルファベットの役割を説明してください。 –

+1

戻り値、すなわち、あなたが呼び出しコードで印刷するa-z文字を保持するだけです。 – niksofteng

1

TRY THIS:あなたは以下のように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 @[email protected]+1 
    END 

     RETURN 
END 

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

ループまたは機能何の必要がありません。数字だけのためにmasterデータベースからSpt_Valuesテーブルを取得し、それらをキャストしない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 
+0

はい、私はスカラーUDFを使用してそれをしたい –

+0

上記の選択を関数に入れます。それを@JasonClarkと呼ぶ –

関連する問題