Funciones y GETDATE()

25/05/2006 - 00:47 por Pablo Rodríguez | Informe spam
Tengo la siguiente función:

CREATE FUNCTION fnObtenerLicenciasVencidas
(
)
RETURNS TABLE
AS
RETURN
(
SELECT TOP 100 PERCENT C.Nombre + ' ' + C.Apellido AS Cliente, L.*
FROM
tblLicencia L
INNER JOIN tblCliente C
ON L.IdCliente = C.Id
WHERE L.Vencimiento < GETDATE()
ORDER BY C.Apellido, C.Nombre
)
GO

y recibo la siguiente respuesta:

Msg 443, Level 16, State 1, Procedure fnObtenerLicenciasNODVencidas,
Line 19
Uso no válido de 'getdate' en una función.

Alguien me puede decir donde está el error por favor??
Muchas Gracias por adelantado!
 

Leer las respuestas

#1 Alejandro Mesa
25/05/2006 - 02:43 | Informe spam
Pablo,

Puedes pasar ese valor como parametro de entrada a la funcion. Tambien
puedes definir una vista que haga un select de getdate() y usar la vista
dentro de la fuuncion. A proposito, te recomiendo que no ordenes el resultado
dentro de la funcion, sino en el select que la referencia a ella, solamente
de esa forma garantizas que el resultado este ordenado. Referencia las tablas
usando el duenio y no uses "*", sino la lista explicita de columnas que
deseas.

CREATE FUNCTION fnObtenerLicenciasVencidas
(
@d datetime
)
RETURNS TABLE
AS
RETURN
(
SELECT C.Nombre + ' ' + C.Apellido AS Cliente, L.*
FROM
dbo.tblLicencia L
INNER JOIN dbo.tblCliente C
ON L.IdCliente = C.Id
WHERE L.Vencimiento < @d
)
GO

declare @d datetime

set @d = getdate()

select *
from dbo.fnObtenerLicenciasVencidas(@d)
order by Cliente
go


AMB

"Pablo Rodríguez" wrote:

Tengo la siguiente función:

CREATE FUNCTION fnObtenerLicenciasVencidas
(
)
RETURNS TABLE
AS
RETURN
(
SELECT TOP 100 PERCENT C.Nombre + ' ' + C.Apellido AS Cliente, L.*
FROM
tblLicencia L
INNER JOIN tblCliente C
ON L.IdCliente = C.Id
WHERE L.Vencimiento < GETDATE()
ORDER BY C.Apellido, C.Nombre
)
GO

y recibo la siguiente respuesta:

Msg 443, Level 16, State 1, Procedure fnObtenerLicenciasNODVencidas,
Line 19
Uso no válido de 'getdate' en una función.

Alguien me puede decir donde está el error por favor??
Muchas Gracias por adelantado!



Preguntas similares