Funktioniert nicht für mich.
In meinem Fall verwende ich den CTE-Wert innerhalb der RETURN-Klausel einer Tabellenwert-benutzerdefinierten Funktion. Wenn ich die RETURN-Klausel in BEGIN-END umbrechen, erhalte ich die gleiche Fehlermeldung, aber eine leere RETURN() -Klausel funktioniert einwandfrei. Ich glaube, dass die Fehlermeldung in diesem Fall falsch ist.
Dies funktioniert:
CREATE FUNCTION [dbo].[ft_SplitStringOnChar]
(
@s varchar(8000),
@sep char(1)
)
RETURNS TABLE
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn AS TokenNumber,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS TokenString
FROM Pieces
)
GO
This does not:
CREATE FUNCTION [dbo].[ft_SplitStringOnChar]
(
@s varchar(8000),
@sep char(1)
)
RETURNS TABLE
AS
BEGIN
;
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn AS TokenNumber,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS TokenString
FROM Pieces
)
END
GO
gleiche gilt für die MERGE-Anweisung SQL Server 2008, auch - es ** muss ** mit einem Semikolon abgeschlossen werden! –
gbn, du hast meine Haut gerettet. Ich habe diesen Fehler bei einer Abfrage-Komponente in Delphi bekommen, war ratlos! Danke noch einmal. Und du Duncan. –