No funciona para mí.
En mi caso estoy usando el valor CTE dentro de la cláusula RETORNO de una función definida por el usuario de tabla. Si envuelvo la cláusula RETORNO en BEGIN-END recibo el mismo mensaje de error, pero una cláusula RETURN() desnuda funciona bien. Creo que el mensaje de error es incorrecto en este caso.
Esto funciona:
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
mismo ocurre con la instrucción MERGE SQL Server 2008, también - ** ** imprescindible terminar con un punto y coma! –
gbn, has guardado mi escondite. ¡Estaba obteniendo este error en un componente de consulta en Delphi, estaba perplejo! Gracias de nuevo. Y tú Duncan. –