PDA

Ver la Versión Completa : Executar un procedimiento dentro de un Select?


mendozasoftware
31-10-2006, 19:03:49
hola amigos tengo un problema.. quiero hacer una insercion en una tabla
con un select, pero hay un campo que necesito validar antes de insertarlo,,
por ejemplo:

Insert into Vigentes(id_empleado, vigente)
select (id_empleado, {aki kiero executar la validacion de procedimuento}
from empleados.

mi procedimiento tiene tres variables id_empleado, fecha_i, fecha_f y me devuelve si estubo vigente o no...
con el procedimiento no tengo problemas..... pero quiero insertar a cada trabajador vigente en la tabla.... ojala me puedan ayudar... saludos

sinalocarlos
31-10-2006, 19:24:59
buen dia carlos

provaste ya con funciones en ves de procedimientos

seria algo asi como:


CREATE FUNCTION fn_valida
(id_empleado int,
fecha_i datetime,
fecha_f datetime)
RETURNS int
AS
BEGIN
declare @resultado int

--AQUI VALIDAS

RETURN @resultado

END


Insert into Vigentes(id_empleado, vigente)
select (id_empleado, fn_valida (id_empleado, fecha_i, fecha_f)
from empleados.



Espero te sirva la idea

mendozasoftware
31-10-2006, 20:26:35
Sigo Teniendo Problemas Con La Inserccion:

Este Es La Funcion:



Create Function Fue_vigente_2(
@id_trabajad Int,
@fi Datetime,
@ff Datetime)
Returns Varchar(2)
As
Begin
Declare @movimiento Varchar(1)
Declare @fecha_mov Datetime
Declare @fue Varchar(2)

Set @movimiento='z'

Select @movimiento=mov_tipo, @fecha_mov=fecha
From V_trabmovi Where Id_trabajad=@id_trabajad
And Fecha<=@ff And Id_trabmovi=(select Max(id_trabmovi) From Trabmovi
Where Id_trabajad=@id_trabajad)

If (@movimiento<>'z')
Begin
If (@movimiento='b' And @fecha_mov>=@fi)
Set @fue='si' Else
If (@movimiento='b' And (@fecha_mov<@ff Or @fecha_mov<@fi))
Set @fue='no' Else
Set @fue='si'
End Else
Set @fue='no'
Return @fue
End




Y Trate De Poner La Insercion Como Me Dijiste



Insert Into Trabvig(id_trabajad, Vigente)
Select (id_trabajad, Fue_vigente_2 (id_trabajad, '10/01/206','10/31/2006')
From Trabajad



Estoy Haciendo Algo Mal??





Saludos

sinalocarlos
31-10-2006, 20:45:55
nesecitaria saber el error que produce el SQL, a primera vista seria la fecha que le mandas en el segundo parametro de la funcion en el select del insert
'10/01/206' seria '10/01/2006' si puedes mandar el error generado seria mas facil

mendozasoftware
31-10-2006, 20:58:36
ESTA ES LA SENTENCIA

Insert Into Trabvig(id_trabajad, Vigente)
Select (id_trabajad, Fue_vigente_2 (id_trabajad, GETDATE,GETDATE))
From Trabajad

Y EL ERROR:::::
______________________________________

Server: Msg 170, Level 15, State 1, Line 2
Line 2: Incorrect syntax near ','.


TAMBIEN LO PONGO DE ESTA MANERA


Insert Into Trabvig(id_trabajad, Vigente)
Select id_trabajad, FUE_VIGENTE_2 (id_trabajad, GETDATE,GETDATE)
From Trabajad

Y ME MANDA EL ERROR
Server: Msg 195, Level 15, State 10, Line 2
'FUE_VIGENTE_2' is not a recognized function name.

LA FUNCION EXISTE !!!

sinalocarlos
31-10-2006, 21:50:38
ok entonces serian dos cosas:

la funcion GETDATE se ejecuta con GETDATE()
y aqui el error fue mio se me olvido comentar que tienes que expresar la funcion anteponiendo el dBowner :D


quedaria el insert asi:




Insert Into Trabvig(id_trabajad, Vigente)
Select id_trabajad, dbo.FUE_VIGENTE_2 (id_trabajad, GETDATE(),GETDATE())
From Trabajad



pruebalo y veamos que pasa

mendozasoftware
31-10-2006, 22:07:11
Si Lo Probe Asi Y Funciono....
Deberia De Pasar Igual Con El Procedure O Sera Lo Ideal Usar La Funcion??

sinalocarlos
31-10-2006, 22:16:43
hasta donde yo se, lo cual es poco, no se puede incluir un procedimiento almacenado dentro de un select, creo yo que se deve a que un procedimiento regresa los valores por medio de variables OUTPUT, encuentro la similitud con el tratar de usar un procedimiento de Delphi dentro de un IF o dentro de la llamada a otro procedure.

me alegra, pues, que te haya sido de utilidad mi participacion