2008-09-21 8 views
0

Je suis en train de créer une UDF dans SQL Server 2005 Express comme ci-dessous:Erreur de création UDF dans SQL Server 2005

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 je tente de créer la fonction ci-dessus, j'obtiens une erreur:

Msg 102, Level 15, State 1, Procedure CombineValues, Line 10 Incorrect syntax near '='.

Qu'est-ce que je fais mal?

Répondre

0

Cette réponse est tirée de l'affiche originale, Wild Thing. S'il vous plaît ne votez pas haut ou bas.

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 
0

essayez de changer SELECT pour régler, puis terminez votre fonction par SELECT (ING) votre @CuisineList

0

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

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 pour marquer cela comme la réponse, mais puisque je suis celui qui a posé cette question, je ne suis pas sûr que ce soit approprié? Aucune suggestion? S'il vous plaît sentir sentir pour commenter.

+0

Votre réponse est correcte. Le marquer comme correct aide la communauté à trouver les bonnes réponses. –

+0

Merci, mais il semble que je ne peux pas masquer mon propre message comme réponse? Peut-être que quelqu'un d'autre peut copier-coller cette réponse, et je vais le marquer? Ou y a-t-il un meilleur moyen? –

1

Vous devez faire attention lorsque vous utilisez cette méthode. Cela ne peut pas vous affecter maintenant, pour cette requête, mais gardez cela à l'esprit pour les futures applications 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 originale 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'accueillir ce, avec une légère modification de votre fonction, comme ça ...

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 dépistant NOT NULL, vous éliminerez ce problème potentiel.