Fehler beim Erstellen der UDF in SQL Server 2005
-
02-07-2019 - |
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?
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.