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

#11 Pablo Rodríguez
27/05/2006 - 00:18 | Informe spam
Gracias, es bueno saber que se puede utilizar así,
sólo me queda una duda:

hay alguna ventaja en utilizar una u otra forma???



"Jhonny Vargas P. [MVP]" escribió en el
mensaje news:
Hola Pablo,

Lo puedes invocar de 2 formas:

1. Como un Procedimiento Almacenado
Ejemplo:
ConString = "string de coneccion a la base de datos."
Dim objConnection As New SqlClient.SqlConnection(ConString), _
objCommand As New SqlClient.SqlCommand, _
objDataSet As New DataSet, _
myDataAdapter As SqlClient.SqlDataAdapter

myDataAdapter = New SqlClient.SqlDataAdapter("sp_nombreprocedimiento",
objConnection)
myDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
myDataAdapter.Fill(objDataSet, "tabla")

objConnection.Close()

En objDataSet tienes el resultado de la operación.

2. Como una consulta cualquiera a la base de datos:

ConString = "string de coneccion a la base de datos."
Dim objConnection As New SqlClient.SqlConnection(ConString), _
objCommand As New SqlClient.SqlCommand, _
objDataSet As New DataSet, _
myDataAdapter As SqlClient.SqlDataAdapter

myDataAdapter = New SqlClient.SqlDataAdapter("sp_nombreprocedimiento",
objConnection)
myDataAdapter.SelectCommand.CommandType = CommandType.Text
myDataAdapter.Fill(objDataSet, "tabla")

objConnection.Close()

En este caso la única diferencia establecida es el COMMANDTYPE.TEXT o
COMMANDTYPE.STOREPROCEDURE ya que no se envía ningún parámetro al SP
si se llega a enviar un parámetro, hay que especificar en el primer punto
que nombre es el parámetro de que tipo es, y el valor.

Espero te sirva.

Saludos,
Jhonny Vargas P.
Santiago de Chile



"Pablo Rodríguez" escribió en el mensaje
news:%
Es que soy nuevo con los Proc Alamcenados y funciones, entonces creí que
sólo podía hacerlo con funciones,
¿cómo llamas a un proc así desde VB.NET?

Saludos


"Jhonny Vargas P. [MVP]" escribió en el
mensaje news:
CREATE PROCEDURE spObtenerLicenciasVencidas
AS

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


Saludos,
Jhonny Vargas P.
Santiago de Chile

"Pablo Rodríguez" escribió en el mensaje
news:
No comprendo... como lo harías?



"Jhonny Vargas P. [MVP]" escribió en
el mensaje news:%23iqfEy$
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
#12 Jhonny Vargas P. [MVP]
27/05/2006 - 00:34 | Informe spam
No sé realmente si hay alguna ventaja considerable entre uno u otro
método...

Por lo menos utilizo la forma más ordenada de ejecutar el SP que es creando
un "command" y agrego parámetro por parámetro existentes en un SP.


Saludos,
Jhonny Vargas P.
Santiago de Chile


"Pablo Rodríguez" escribió en el mensaje
news:
Gracias, es bueno saber que se puede utilizar así,
sólo me queda una duda:

hay alguna ventaja en utilizar una u otra forma???



"Jhonny Vargas P. [MVP]" escribió en el
mensaje news:
Hola Pablo,

Lo puedes invocar de 2 formas:

1. Como un Procedimiento Almacenado
Ejemplo:
ConString = "string de coneccion a la base de datos."
Dim objConnection As New SqlClient.SqlConnection(ConString), _
objCommand As New SqlClient.SqlCommand, _
objDataSet As New DataSet, _
myDataAdapter As SqlClient.SqlDataAdapter

myDataAdapter = New SqlClient.SqlDataAdapter("sp_nombreprocedimiento",
objConnection)
myDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
myDataAdapter.Fill(objDataSet, "tabla")

objConnection.Close()

En objDataSet tienes el resultado de la operación.

2. Como una consulta cualquiera a la base de datos:

ConString = "string de coneccion a la base de datos."
Dim objConnection As New SqlClient.SqlConnection(ConString), _
objCommand As New SqlClient.SqlCommand, _
objDataSet As New DataSet, _
myDataAdapter As SqlClient.SqlDataAdapter

myDataAdapter = New SqlClient.SqlDataAdapter("sp_nombreprocedimiento",
objConnection)
myDataAdapter.SelectCommand.CommandType = CommandType.Text
myDataAdapter.Fill(objDataSet, "tabla")

objConnection.Close()

En este caso la única diferencia establecida es el COMMANDTYPE.TEXT o
COMMANDTYPE.STOREPROCEDURE ya que no se envía ningún parámetro al SP
si se llega a enviar un parámetro, hay que especificar en el primer punto
que nombre es el parámetro de que tipo es, y el valor.

Espero te sirva.

Saludos,
Jhonny Vargas P.
Santiago de Chile



"Pablo Rodríguez" escribió en el mensaje
news:%
Es que soy nuevo con los Proc Alamcenados y funciones, entonces creí que
sólo podía hacerlo con funciones,
¿cómo llamas a un proc así desde VB.NET?

Saludos


"Jhonny Vargas P. [MVP]" escribió en
el mensaje news:
CREATE PROCEDURE spObtenerLicenciasVencidas
AS

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


Saludos,
Jhonny Vargas P.
Santiago de Chile

"Pablo Rodríguez" escribió en el mensaje
news:
No comprendo... como lo harías?



"Jhonny Vargas P. [MVP]" escribió en
el mensaje news:%23iqfEy$
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
#13 Pablo Rodríguez
29/05/2006 - 20:09 | Informe spam
Una nueva duda, hay diferencia en cuanto a rendimiento al usar un proc. o
una función??


Saludos!




"Jhonny Vargas P. [MVP]" escribió en el
mensaje news:%23iqfEy$
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
#14 MAXI [MVP SQL]
30/05/2006 - 02:31 | Informe spam
Depende para que, me imagino que cuando hablas de funciones hablas de las
que retornan tablas y SP que retornan tablas, ahi no vas a tener
diferencias, pero las funciones tinen mucha mas aplicacion que los Stores,
por ej podrias usar funciones dentro de tu Select o Where cosa que no podes
hacer con los Stores


Microsoft MVP SQL Server
Orador para Culminis
Miembro de SQLgurus (www.sqlgurus.org)
"Pablo Rodríguez" escribió en el mensaje
news:
Una nueva duda, hay diferencia en cuanto a rendimiento al usar un proc. o
una función??


Saludos!




"Jhonny Vargas P. [MVP]" escribió en el
mensaje news:%23iqfEy$
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!









email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida