Insert y funciones que devuelven un tipo TABLE.

18/08/2005 - 10:09 por José Antonio | Informe spam
Hola a todos.
Me he encontrado con una situacion nueva y no he encontrado la forma de
reselverla sin un cursor de solo lectura.
Tengo una tabla con operaciones, en el que el unico dato que me hace falta
es el numero de operacion.
Este numero de operacion se lo paso a una funcion definida por el usuario
que me devuelve un tipo table con x filas.

Debo de insertar en una tabla de anotaciones todas las anotaciones que me
devuelvan un rango de operaciones especifico, por ejemplo desde la operacion
120 a la 467.

Con la instruccion select * from dbo.funcion(operacion) consigo las
anotaciones de una operacion y con insert anotaciones select * from
dbo.funcion(operacion) inserto las anotaciones que corresponden a una
operacion.

Pero para insertar las anotaciones desde la operacion 120 a la 467 no
encuentro la forma a no ser que recorra la tabla operaciones on un cursor
desde la operacion 120 a la 467.

El cursor recorre la siguiente instruccion select operacion from operaciones
where operacion>0 and operacion<F7

Alguien encuentra la forma de hacer esto sin un cursor?



Saludos y gracias.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
18/08/2005 - 14:24 | Informe spam
José Antonio.

Puedes postear el codigo de la udf?


AMB

"José Antonio" wrote:

Hola a todos.
Me he encontrado con una situacion nueva y no he encontrado la forma de
reselverla sin un cursor de solo lectura.
Tengo una tabla con operaciones, en el que el unico dato que me hace falta
es el numero de operacion.
Este numero de operacion se lo paso a una funcion definida por el usuario
que me devuelve un tipo table con x filas.

Debo de insertar en una tabla de anotaciones todas las anotaciones que me
devuelvan un rango de operaciones especifico, por ejemplo desde la operacion
120 a la 467.

Con la instruccion select * from dbo.funcion(operacion) consigo las
anotaciones de una operacion y con insert anotaciones select * from
dbo.funcion(operacion) inserto las anotaciones que corresponden a una
operacion.

Pero para insertar las anotaciones desde la operacion 120 a la 467 no
encuentro la forma a no ser que recorra la tabla operaciones on un cursor
desde la operacion 120 a la 467.

El cursor recorre la siguiente instruccion select operacion from operaciones
where operacion>0 and operacion<F7

Alguien encuentra la forma de hacer esto sin un cursor?



Saludos y gracias.



Respuesta Responder a este mensaje
#2 Jose Antonio
18/08/2005 - 19:17 | Informe spam
Alejandro, este es el codigo de la funcion:

CREATE FUNCTION CG_DR_ASILEASING (@OPERACION INT)
RETURNS @TABLA TABLE (OPERACION INT,TIPO CHAR(1),APUNTE INT,CUENTA
VARCHAR(10),FECHA DATETIME,DOCUMENTO VARCHAR(20),DEBE DECIMAL(15,2),HABER
DECIMAL(15,2))
AS
BEGIN
DECLARE @FECHAVAR DATETIME,@HASTAFECHA DATETIME
DECLARE @DOCUMENTO VARCHAR(20),@VARIACION VARCHAR(1)
DECLARE @IMPINTI DECIMAL(15,2),@IMPINTF DECIMAL(15,2)
DECLARE @IMPCORREOI DECIMAL(15,2),@IMPCORREOF DECIMAL(15,2)
DECLARE @IMPIVAI DECIMAL(15,2),@IMPIVAF DECIMAL(15,2)
DECLARE @LARGOI DECIMAL(15,2),@LARGOF DECIMAL(15,2)
DECLARE @CORTOI DECIMAL(15,2),@CORTOF DECIMAL(15,2)
DECLARE @CPCORTO VARCHAR(10),@CPLARGO VARCHAR(10)
DECLARE @CINTDIF VARCHAR(10),@CIVADIF VARCHAR(10),@CDERECHOS VARCHAR(10)
DECLARE @DEBE DECIMAL(15,2),@HABER DECIMAL(15,2),@TOTAL DECIMAL(15,2)
DECLARE @DIFINT DECIMAL(15,2),@DIFIVA DECIMAL(15,2),@DIFLARGO
DECIMAL(15,2),@DIFCORTO DECIMAL(15,2)

SELECT
@DOCUMENTO=SERIE+'-'+CONVERT(VARCHAR,OPERACION)+'/'+RIGHT(CONVERT(VARCHAR,DATEPART(YY,FECHA)),2),@FECHAVARÊSE
WHEN FECHAVAR IS NULL THEN FECHA ELSE FECHAVAR END,
@CPCORTO=CPCORTO,@CINTDIF=CINTDIF,@CIVADIF=CIVADIF,@CPLARGO=CPLARGO,@VARIACIONÊSE
WHEN FECHAVAR IS NULL THEN 'N' ELSE 'S' END,@CDERECHOSÍERECHOS
FROM LEASING WHERE OPERACION=@OPERACION

SET @HASTAFECHAÚTEADD(yy,1,@FECHAVAR)

SELECT @CORTOI=ISNULL(SUM(VARTOTAL),0),@CORTOF=ISNULL(SUM(TOTAL),0) FROM
CULEASING WHERE OPERACION=@OPERACION AND VENCIMIENTO>=@FECHAVAR AND
VENCIMIENTO<@HASTAFECHA

SELECT
@IMPINTI=ISNULL(SUM(VARINTERES),0),@IMPCORREOI=ISNULL(SUM(VARCORREO),0),@IMPIVAI=ISNULL(SUM(VARIVA),0),@IMPINTF=ISNULL(SUM(INTERESF),0),
@IMPCORREOF=ISNULL(SUM(CORREOF),0),@IMPIVAF=ISNULL(SUM(IVAF),0),@LARGOI=ISNULL(SUM(VARTOTAL),0),@LARGOF=ISNULL(SUM(TOTAL),0),@TOTAL=ISNULL(SUM(AMORTIZACION),0)
FROM CULEASING WHERE OPERACION=@OPERACION AND VENCIMIENTO>=@FECHAVAR

SET @DIFLARGO=@
SET @DIFCORTO=@

SET @DIFINT=@+@
SET @DIFIVA=@

IF @VARIACION='N'
BEGIN
SET @DEBE=@TOTAL
SET @HABER=0
INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,1,@CDERECHOS,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)
END

IF @DIFINT!=0
BEGIN
SET @DEBE=0
SET @HABER=0
IF @DIFINT>0 SET @DEBE=@DIFINT ELSE SET @HABER«S(@DIFINT)
INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,2,@CINTDIF,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)
END
IF @DIFIVA!=0
BEGIN
SET @DEBE=0
SET @HABER=0
IF @DIFIVA>0 SET @DEBE=@DIFIVA ELSE SET @HABER«S(@DIFIVA)
INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,3,@CIVADIF,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)
END
IF @DIFLARGO!=0
BEGIN
SET @DEBE=0
SET @HABER=0
IF @DIFLARGO>0 SET @HABER=@DIFLARGO ELSE SET @DEBE«S(@DIFLARGO)
INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,4,@CPLARGO,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)
END
IF @DIFCORTO!=0
BEGIN
SET @DEBE=0
SET @HABER=0
IF @DIFCORTO>0 SET @HABER=@DIFCORTO ELSE SET @DEBE«S(@DIFCORTO)
INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,5,@CPCORTO,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)
END
RETURN
END






"Alejandro Mesa" escribió en el
mensaje news:
José Antonio.

Puedes postear el codigo de la udf?


AMB

"José Antonio" wrote:

Hola a todos.
Me he encontrado con una situacion nueva y no he encontrado la forma de
reselverla sin un cursor de solo lectura.
Tengo una tabla con operaciones, en el que el unico dato que me hace
falta
es el numero de operacion.
Este numero de operacion se lo paso a una funcion definida por el usuario
que me devuelve un tipo table con x filas.

Debo de insertar en una tabla de anotaciones todas las anotaciones que me
devuelvan un rango de operaciones especifico, por ejemplo desde la
operacion
120 a la 467.

Con la instruccion select * from dbo.funcion(operacion) consigo las
anotaciones de una operacion y con insert anotaciones select * from
dbo.funcion(operacion) inserto las anotaciones que corresponden a una
operacion.

Pero para insertar las anotaciones desde la operacion 120 a la 467 no
encuentro la forma a no ser que recorra la tabla operaciones on un cursor
desde la operacion 120 a la 467.

El cursor recorre la siguiente instruccion select operacion from
operaciones
where operacion>0 and operacion<F7

Alguien encuentra la forma de hacer esto sin un cursor?



Saludos y gracias.



Respuesta Responder a este mensaje
#3 José Antonio
19/08/2005 - 14:22 | Informe spam
¿Estan todos los anticursores de vacaciones? je,je

"José Antonio" escribió en el
mensaje news:%
Hola a todos.
Me he encontrado con una situacion nueva y no he encontrado la forma de
reselverla sin un cursor de solo lectura.
Tengo una tabla con operaciones, en el que el unico dato que me hace falta
es el numero de operacion.
Este numero de operacion se lo paso a una funcion definida por el usuario
que me devuelve un tipo table con x filas.

Debo de insertar en una tabla de anotaciones todas las anotaciones que me
devuelvan un rango de operaciones especifico, por ejemplo desde la
operacion 120 a la 467.

Con la instruccion select * from dbo.funcion(operacion) consigo las
anotaciones de una operacion y con insert anotaciones select * from
dbo.funcion(operacion) inserto las anotaciones que corresponden a una
operacion.

Pero para insertar las anotaciones desde la operacion 120 a la 467 no
encuentro la forma a no ser que recorra la tabla operaciones on un cursor
desde la operacion 120 a la 467.

El cursor recorre la siguiente instruccion select operacion from
operaciones where operacion>0 and operacion<F7

Alguien encuentra la forma de hacer esto sin un cursor?



Saludos y gracias.

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