Question

J'essaie de créer une UDF dans SQL Server 2005 Express comme ci-dessous:

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

Cuisines a la structure:

CuisineID INT PK,
Cuisine VARCHAR(20)

Lorsque j'essaie de créer la fonction comme ci-dessus, un message d'erreur s'affiche:

  

Msg 102, niveau 15, état 1, procédure CombineValues, ligne 10 incorrecte   syntaxe proche de '='.

Qu'est-ce que je fais de travers?

Était-ce utile?

La solution

Cette réponse provient de l’affiche originale, Wild Thing. Veuillez ne pas voter à la hausse ou à la baisse.

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

Autres conseils

Vous devez faire attention lorsque vous utilisez cette méthode. Cela ne vous concerne peut-être pas maintenant, mais gardez cela à l'esprit pour les applications futures de cette méthode.

Le problème se produit lorsque vous avez une valeur NULL dans votre liste. Lorsque cela se produit, vous obtiendrez des résultats incorrects.

Par exemple, si votre table d'origine ressemble à ceci ...

1   Blah
2   NULL
3   Foo
4   Cracker

Votre fonction retournera Foo, Cracker. La première valeur, Blah, sera manquée par cet appel de fonction. Il est très facile d’y répondre, avec une légère modification de votre fonction, comme ceci ...

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

En testant NOT NULL, vous éliminerez ce problème potentiel.

essayez de changer SELECT en SET puis finissez votre fonction en SELECT (ing) votre @CuisineList

Hojou, votre suggestion n'a pas fonctionné, mais quelque chose de similaire a fonctionné:

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

Je voudrais marquer ceci comme réponse, mais comme je suis celui qui a posé cette question, je ne suis pas sûr que cela convienne? Aucune suggestion? S'il vous plaît n'hésitez pas à commenter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top