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!

Preguntas similare

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!



Respuesta Responder a este mensaje
#2 xmemo
25/05/2006 - 03:12 | Informe spam
intenta cambiar la instruccion:
L.Vencimiento < GETDATE()
por
convert(char(8),L.Vencimiento,112) < convert(char(8),GETDATE(),112)

espero te sirva porque asumo que campo vencimiento viene con hora.


"Pablo Rodríguez" escribió en el mensaje
news:e%
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!

Respuesta Responder a este mensaje
#3 BitOne®
25/05/2006 - 04:15 | Informe spam
fijate tu funcion posee una restrinccion que tienen las funciones definida por usuarios.

Utilizas una funcion no determinista ( GETDATE()) y esto no esta permitido dentro
de las funcioens definidas por el usuario.

es por esto que alejandro ha modificado tu funcion original.

Refierete a los book online sobre el tema create funcion y en el veras cuales
son los lineamientos para la creacion de funiones.

BitOne®





"xmemo" escribió en el mensaje news:
intenta cambiar la instruccion:
L.Vencimiento < GETDATE()
por
convert(char(8),L.Vencimiento,112) < convert(char(8),GETDATE(),112)

espero te sirva porque asumo que campo vencimiento viene con hora.


"Pablo Rodríguez" escribió en el mensaje
news:e%
> 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!
>


Respuesta Responder a este mensaje
#4 Pablo Rodríguez
25/05/2006 - 06:48 | Informe spam
Muchas gracias a todos,

Saludos!

"Pablo Rodríguez" escribió en el mensaje
news:e%
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!

Respuesta Responder a este mensaje
#5 Jhonny Vargas P. [MVP]
25/05/2006 - 15:15 | Informe spam
Hola Pablo,

Consulta: ¿para que usar una función si estás devolviendo registros, no
sería más factible utilizar un Procedimiento Almacenado?

PD: Solo por preguntar ;)

Saludos,
Jhonny Vargas P.
Santiago de Chile


"Pablo Rodríguez" escribió en el mensaje
news:e%
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!

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida