Error en Función

05/06/2007 - 22:36 por Pablo Rodríguez | Informe spam
Hola grupo, F1, tengo el siguiente problemita:

dentro de una función tengo el siguiente código:

IF (@@ROWCOUNT = 0)
BEGIN
DECLARE @FechaHora smalldatetime
SET @FechaHora = (SELECT GETDATE())

INSERT INTO tblSesion(IdUsuario, Inicio, Cierre, Caja)
VALUES (@IdUsuario, @FechaHora, NULL, @IdCaja)

DECLARE @IdSesion int
SET @IdSesion = @@IDENTITY

INSERT INTO @RetVal -- Aquí está el error
SELECT TOP 1 *
FROM tblSesion
WHERE Id = @IdSesion
END

Y en la línea que marqué con el comentario me da el siguiente error:

Msg 443, Level 16, State 15, Procedure fnObtenerSesionCaja, Line 20
Uso no válido de operador con efectos secundarios o dependiente del tiempo
en 'INSERT' dentro de una función.

Realmente no se de que se trata el error y no encontré info al respecto
Saludos y gracias por adelantado!

Preguntas similare

Leer las respuestas

#1 Manuel Etcheto
05/06/2007 - 22:47 | Informe spam
Es correcto, "No se permiten las funciones no deterministas integradas en el
cuerpo de la funciones definidas por el usuario"
Eso está textual en la ayuda, "CREATE FUNCTION", " Determinismo de funciones
y efectos secundarios"

Un truco, si necesitas utilizar la fecha del servidor es crearte una vista
que haga
"select GETDATE() as ahora" y desde la función llamar a esta vista...

Suerte
Manuel


"Pablo Rodríguez" escribió en el mensaje
news:
Hola grupo, F1, tengo el siguiente problemita:

dentro de una función tengo el siguiente código:

IF (@@ROWCOUNT = 0)
BEGIN
DECLARE @FechaHora smalldatetime
SET @FechaHora = (SELECT GETDATE())

INSERT INTO tblSesion(IdUsuario, Inicio, Cierre, Caja)
VALUES (@IdUsuario, @FechaHora, NULL, @IdCaja)

DECLARE @IdSesion int
SET @IdSesion = @@IDENTITY

INSERT INTO @RetVal -- Aquí está el error
SELECT TOP 1 *
FROM tblSesion
WHERE Id = @IdSesion
END

Y en la línea que marqué con el comentario me da el siguiente error:

Msg 443, Level 16, State 15, Procedure fnObtenerSesionCaja, Line 20
Uso no válido de operador con efectos secundarios o dependiente del tiempo
en 'INSERT' dentro de una función.

Realmente no se de que se trata el error y no encontré info al
respecto
Saludos y gracias por adelantado!

Respuesta Responder a este mensaje
#2 Pablo Rodríguez
06/06/2007 - 20:05 | Informe spam
Gracias Manuel...


"Manuel Etcheto" escribió en el mensaje
news:
Es correcto, "No se permiten las funciones no deterministas integradas en
el cuerpo de la funciones definidas por el usuario"
Eso está textual en la ayuda, "CREATE FUNCTION", " Determinismo de
funciones y efectos secundarios"

Un truco, si necesitas utilizar la fecha del servidor es crearte una vista
que haga
"select GETDATE() as ahora" y desde la función llamar a esta vista...

Suerte
Manuel


"Pablo Rodríguez" escribió en el mensaje
news:
Hola grupo, F1, tengo el siguiente problemita:

dentro de una función tengo el siguiente código:

IF (@@ROWCOUNT = 0)
BEGIN
DECLARE @FechaHora smalldatetime
SET @FechaHora = (SELECT GETDATE())

INSERT INTO tblSesion(IdUsuario, Inicio, Cierre, Caja)
VALUES (@IdUsuario, @FechaHora, NULL, @IdCaja)

DECLARE @IdSesion int
SET @IdSesion = @@IDENTITY

INSERT INTO @RetVal -- Aquí está el error
SELECT TOP 1 *
FROM tblSesion
WHERE Id = @IdSesion
END

Y en la línea que marqué con el comentario me da el siguiente error:

Msg 443, Level 16, State 15, Procedure fnObtenerSesionCaja, Line 20
Uso no válido de operador con efectos secundarios o dependiente del
tiempo en 'INSERT' dentro de una función.

Realmente no se de que se trata el error y no encontré info al
respecto
Saludos y gracias por adelantado!





Respuesta Responder a este mensaje
#3 Pablo Rodríguez
06/06/2007 - 21:34 | Informe spam
Ahora tengo un nuevo problema, ya corregí el anterior con un vista que
devuelva fecha y hora...
pero mi nuevo problema es que no puedo obtener el @@IDENTITY dentro de una
función, por lo que lo hice en un proc. almacenado... pero ahora me
encuentro con que no puedo llamar al proc. desde la función

Puedo hacer un proc. almacenado que al final haga un select sobre una
variable del tipo TABLE???
Y si puedo, como lo uso desde VB.NET??



________________
"Manuel Etcheto" escribió en el mensaje
news:
Es correcto, "No se permiten las funciones no deterministas integradas en
el cuerpo de la funciones definidas por el usuario"
Eso está textual en la ayuda, "CREATE FUNCTION", " Determinismo de
funciones y efectos secundarios"

Un truco, si necesitas utilizar la fecha del servidor es crearte una vista
que haga
"select GETDATE() as ahora" y desde la función llamar a esta vista...

Suerte
Manuel


"Pablo Rodríguez" escribió en el mensaje
news:
Hola grupo, F1, tengo el siguiente problemita:

dentro de una función tengo el siguiente código:

IF (@@ROWCOUNT = 0)
BEGIN
DECLARE @FechaHora smalldatetime
SET @FechaHora = (SELECT GETDATE())

INSERT INTO tblSesion(IdUsuario, Inicio, Cierre, Caja)
VALUES (@IdUsuario, @FechaHora, NULL, @IdCaja)

DECLARE @IdSesion int
SET @IdSesion = @@IDENTITY

INSERT INTO @RetVal -- Aquí está el error
SELECT TOP 1 *
FROM tblSesion
WHERE Id = @IdSesion
END

Y en la línea que marqué con el comentario me da el siguiente error:

Msg 443, Level 16, State 15, Procedure fnObtenerSesionCaja, Line 20
Uso no válido de operador con efectos secundarios o dependiente del
tiempo en 'INSERT' dentro de una función.

Realmente no se de que se trata el error y no encontré info al
respecto
Saludos y gracias por adelantado!





Respuesta Responder a este mensaje
#4 Miguel Egea
07/06/2007 - 09:28 | Informe spam
No podrás escribir en tablas desde UDF's,. no al menos directamente. Creo
que el problema que tienes será complicado de resolver si no nos cuentas en
profucindad a donde quieres llegar. ¿porqué una UDF?
Saludos


"Pablo Rodríguez" wrote in message
news:u%
Ahora tengo un nuevo problema, ya corregí el anterior con un vista que
devuelva fecha y hora...
pero mi nuevo problema es que no puedo obtener el @@IDENTITY dentro de una
función, por lo que lo hice en un proc. almacenado... pero ahora me
encuentro con que no puedo llamar al proc. desde la función

Puedo hacer un proc. almacenado que al final haga un select sobre una
variable del tipo TABLE???
Y si puedo, como lo uso desde VB.NET??



________________
"Manuel Etcheto" escribió en el mensaje
news:
Es correcto, "No se permiten las funciones no deterministas integradas en
el cuerpo de la funciones definidas por el usuario"
Eso está textual en la ayuda, "CREATE FUNCTION", " Determinismo de
funciones y efectos secundarios"

Un truco, si necesitas utilizar la fecha del servidor es crearte una
vista que haga
"select GETDATE() as ahora" y desde la función llamar a esta vista...

Suerte
Manuel


"Pablo Rodríguez" escribió en el mensaje
news:
Hola grupo, F1, tengo el siguiente problemita:

dentro de una función tengo el siguiente código:

IF (@@ROWCOUNT = 0)
BEGIN
DECLARE @FechaHora smalldatetime
SET @FechaHora = (SELECT GETDATE())

INSERT INTO tblSesion(IdUsuario, Inicio, Cierre, Caja)
VALUES (@IdUsuario, @FechaHora, NULL, @IdCaja)

DECLARE @IdSesion int
SET @IdSesion = @@IDENTITY

INSERT INTO @RetVal -- Aquí está el error
SELECT TOP 1 *
FROM tblSesion
WHERE Id = @IdSesion
END

Y en la línea que marqué con el comentario me da el siguiente error:

Msg 443, Level 16, State 15, Procedure fnObtenerSesionCaja, Line 20
Uso no válido de operador con efectos secundarios o dependiente del
tiempo en 'INSERT' dentro de una función.

Realmente no se de que se trata el error y no encontré info al
respecto
Saludos y gracias por adelantado!









Respuesta Responder a este mensaje
#5 Pablo Rodríguez
07/06/2007 - 17:51 | Informe spam
El problema es más o menos así: tengo una tabla de sesiones donde guardo
quien y cuando inició y cerró sesión, entonces quiero hacer lo siguiente: si
existe una sesión con el mismo IdCaja que recibo por parámetro y tiene el
campo Cierre en NULL, me devuelva esa fila, de lo contrario, necesito que
inserte una nueva fila y me la devuelva.

¿se entiende? a veces no soy bueno explicando..

______________
"Pablo Rodríguez" escribió en el mensaje
news:u%
Ahora tengo un nuevo problema, ya corregí el anterior con un vista que
devuelva fecha y hora...
pero mi nuevo problema es que no puedo obtener el @@IDENTITY dentro de una
función, por lo que lo hice en un proc. almacenado... pero ahora me
encuentro con que no puedo llamar al proc. desde la función

Puedo hacer un proc. almacenado que al final haga un select sobre una
variable del tipo TABLE???
Y si puedo, como lo uso desde VB.NET??



________________
"Manuel Etcheto" escribió en el mensaje
news:
Es correcto, "No se permiten las funciones no deterministas integradas en
el cuerpo de la funciones definidas por el usuario"
Eso está textual en la ayuda, "CREATE FUNCTION", " Determinismo de
funciones y efectos secundarios"

Un truco, si necesitas utilizar la fecha del servidor es crearte una
vista que haga
"select GETDATE() as ahora" y desde la función llamar a esta vista...

Suerte
Manuel


"Pablo Rodríguez" escribió en el mensaje
news:
Hola grupo, F1, tengo el siguiente problemita:

dentro de una función tengo el siguiente código:

IF (@@ROWCOUNT = 0)
BEGIN
DECLARE @FechaHora smalldatetime
SET @FechaHora = (SELECT GETDATE())

INSERT INTO tblSesion(IdUsuario, Inicio, Cierre, Caja)
VALUES (@IdUsuario, @FechaHora, NULL, @IdCaja)

DECLARE @IdSesion int
SET @IdSesion = @@IDENTITY

INSERT INTO @RetVal -- Aquí está el error
SELECT TOP 1 *
FROM tblSesion
WHERE Id = @IdSesion
END

Y en la línea que marqué con el comentario me da el siguiente error:

Msg 443, Level 16, State 15, Procedure fnObtenerSesionCaja, Line 20
Uso no válido de operador con efectos secundarios o dependiente del
tiempo en 'INSERT' dentro de una función.

Realmente no se de que se trata el error y no encontré info al
respecto
Saludos y gracias por adelantado!









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