Frage

Ich versuche, eine UDF in SQL Server 2005 Express zu erstellen, wie unten:

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

Küche hat die Struktur:

CuisineID INT PK,
Cuisine VARCHAR(20)

Wenn ich versuche, wie oben die Funktion zu erstellen, erhalte ich eine Fehlermeldung:

  

Msg 102, Ebene 15, Status 1, Prozedur CombineValues, Zeile 10 falsch   Syntax in der Nähe '='.

Was mache ich falsch?

War es hilfreich?

Lösung

Diese Antwort ist von den Original-Poster, Wild Thing. Bitte stimmen sie nicht nach oben oder unten.

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

Andere Tipps

Sie müssen vorsichtig sein, wenn mit dieser Methode. Dies kann Sie jetzt nicht beeinflussen, für diese Abfrage, aber bitte diese für zukünftige Anwendungen dieser Methode im Auge behalten.

Das Problem tritt auf, wenn Sie einen NULL-Wert in der Liste haben. Wenn dies geschieht, werden Sie falsche Ergebnisse erhalten.

Zum Beispiel, wenn Ihre ursprüngliche Tabelle sieht wie folgt aus ...

1   Blah
2   NULL
3   Foo
4   Cracker

Ihre Funktion gibt Foo, Cracker. Der erste Wert, Blah, wird durch diese Funktion Anruf verpasst werden. Es ist sehr einfach, dies zu unterbringen, mit einer geringfügigen Änderung Ihrer Funktion, so ...

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

Mit dem für NOT NULL testen, werden Sie dieses potentielle Problem beseitigen.

versuchen SELECT Wechsel zu setzen und dann Ihre Funktion beenden, indem Sie SELECT (ing) Ihre @CuisineList

Hojou, Ihr Vorschlag hat nicht funktioniert, aber etwas ähnliches tut:

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

Das mag ich als Antwort markieren, aber da ich es bin, der diese Frage gestellt, ich bin nicht sicher, ob dies angemessen ist? Irgendwelche Vorschläge? Wenden Sie sich bitte fühlen Stellung zu nehmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top