SQL Server 2005 での UDF 作成エラー
-
02-07-2019 - |
質問
で UDF を作成しようとしています SQL Server 2005 Express
以下のように:
CREATE FUNCTION [CombineValues] ()
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @CuisineList VARCHAR(8000);
RETURN
(
SELECT @CuisineList = COALESCE(@CuisineList + ', ', '') +
CAST(Cuisine AS varchar(20))
FROM Cuisines
)
END
料理は次のような構造になっています。
CuisineID INT PK,
Cuisine VARCHAR(20)
上記のように関数を作成しようとすると、エラーが発生します。
MSG 102、レベル15、状態1、手順を組み合わせた値、10行目の誤った構文の近くの誤った構文。
私の何が間違っているのでしょうか?
解決
この答えは元の投稿者、Wild Thing からのものです。賛成票や反対票を投じないでください。
CREATE FUNCTION [CombineValues] ()
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @CuisineList VARCHAR(8000);
SELECT @CuisineList = COALESCE(@CuisineList + ', ', '') + CAST(Cuisine AS varchar(20)) FROM Cuisines;
RETURN
(
SELECT @CuisineList
)
END
他のヒント
この方法を使用する場合は注意が必要です。このクエリでは現時点では影響しないかもしれませんが、このメソッドを今後適用する場合はこの点に留意してください。
この問題は、リストに NULL 値がある場合に発生します。これが発生すると、誤った結果が得られます。
たとえば、元のテーブルが次のようになっているとします。
1 Blah
2 NULL
3 Foo
4 Cracker
関数は Foo、Cracker を返します。最初の値 Blah は、この関数呼び出しでは失われます。次のように関数を少し変更するだけで、これに簡単に対応できます。
CREATE FUNCTION [CombineValues] ()
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @CuisineList VARCHAR(8000);
SELECT @CuisineList = COALESCE(@CuisineList + ', ', '') +
CAST(Cuisine AS varchar(20))
FROM Cuisines
WHERE Cuisine Is Not NULL
RETURN @CuisineList
END
NOT NULL をテストすることで、この潜在的な問題を排除できます。
SELECT を SET に変更してから、@CuisineList を SELECT (ing) して関数を終了してみてください。
Hojou さん、あなたの提案はうまくいきませんでしたが、同様のことがうまくいきました。
CREATE FUNCTION [CombineValues] ()
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @CuisineList VARCHAR(8000);
SELECT @CuisineList = COALESCE(@CuisineList + ', ', '') + CAST(Cuisine AS varchar(20)) FROM Cuisines;
RETURN
(
SELECT @CuisineList
)
END
これを回答としてマークしたいのですが、この質問をしたのは私なので、これが適切かどうかわかりません。助言がありますか?お気軽にコメントください。
所属していません StackOverflow