Insert y funciones que devuelven un tipo TABLE. (Ya estaba posteada pero no la encuentro)

23/08/2005 - 08:31 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?


La funcion es esta:
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

aqui definicion de varias variables para sumar y restar columnas.

e inserto las filas en el la tabla que sera devuelta.

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

INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,2,@CINTDIF,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)

INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,3,@CIVADIF,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)

INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,4,@CPLARGO,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)

INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,5,@CPCORTO,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)

RETURN
END



Saludos y gracias.
 

Leer las respuestas

#1 Alejandro Mesa
23/08/2005 - 14:46 | Informe spam
José Antonio,

Puedes postear el codigo de la udf?

Otra forma seria usando un loop / lazo, que a final de cuentas equivale a un
tratamiento fila por file.

declare @operacion int

set @operacion = 120

while @operacion < 468
begin
insert into t1(c1,..., cn)
select c1,..., cn
from dbo.funcion(@operacion)
end
go

Me gustaria ver el codigo de la funcion para ver si podemos encontrar una
solucion basada en operaciones de conjunto.


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?


La funcion es esta:
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

aqui definicion de varias variables para sumar y restar columnas.

e inserto las filas en el la tabla que sera devuelta.

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

INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,2,@CINTDIF,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)

INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,3,@CIVADIF,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)

INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,4,@CPLARGO,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)

INSERT @TABLA VALUES (@OPERACION,CASE WHEN @DEBE!=0 THEN 'D' ELSE 'H'
END,5,@CPCORTO,@FECHAVAR,@DOCUMENTO,@DEBE,@HABER)

RETURN
END



Saludos y gracias.




Preguntas similares