CTE'S y funciones en línea

13/10/2004 - 10:08 por SqlRanger | Informe spam
¿Es posible usar CTE's dentro de la definición de una función en lína?

Lo pregunto porque no he sido capaz de hacerlo, me da error de sintaxis, y
la documentación de la beta 2 no dice nada acerca de si está soportado o no.

he intentado hacerlo más o menos así:

CREATE FUNCTION fnNombreFuncion ( @Param int )
RETURNS TABLE
AS
RETURN (
WITH NombreCTE ( lista de campos )
AS
(
SELECT
FROM ...
WHERE Campo = @Param
UNION ALL
SELECT ...
FROM
)
SELECT * FROM NombreCTE
)

Si alguien ha conseguido hacerlo, ¿Podría poner un ejemplo con la base de
datos AdventureWorks?

Con un procedimiento almacenado, con una función tabular de múltiples
sentencias y con una vista no he tenido problemas en meter una CTE, pero no
así con las funciones en línea.

Gracias

Jesús López
MVP
 

Leer las respuestas

#1 Eladio Rincón
13/10/2004 - 12:08 | Informe spam
Hola Jesús :-),
quitale los parentesis del return;

drop function dbo.udfSalesOrderDetail
go
create function dbo.udfSalesOrderDetail
(
@SalesOrderId int
)
returns table
as
return

with CTE
as
(
select * from Sales.SalesOrderDetail
where SalesOrderId = @SalesOrderId
)
select
*
from
CTE
go

select * from dbo.udfSalesOrderDetail ( 43659 )

Un abrazo,

Eladio Rincón
SQL Server MVP
Associate Mentor
Solid Quality Learning Iberoamericana
http://www.SolidQualityLearning.com


"SqlRanger" wrote in message
news:
¿Es posible usar CTE's dentro de la definición de una función en lína?

Lo pregunto porque no he sido capaz de hacerlo, me da error de sintaxis, y
la documentación de la beta 2 no dice nada acerca de si está soportado o


no.

he intentado hacerlo más o menos así:

CREATE FUNCTION fnNombreFuncion ( @Param int )
RETURNS TABLE
AS
RETURN (
WITH NombreCTE ( lista de campos )
AS
(
SELECT
FROM ...
WHERE Campo = @Param
UNION ALL
SELECT ...
FROM
)
SELECT * FROM NombreCTE
)

Si alguien ha conseguido hacerlo, ¿Podría poner un ejemplo con la base de
datos AdventureWorks?

Con un procedimiento almacenado, con una función tabular de múltiples
sentencias y con una vista no he tenido problemas en meter una CTE, pero


no
así con las funciones en línea.

Gracias

Jesús López
MVP


Preguntas similares