Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Executar un procedimiento dentro de un Select? (https://www.clubdelphi.com/foros/showthread.php?t=37038)

mendozasoftware 31-10-2006 19:03:49

Executar un procedimiento dentro de un Select?
 
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:

Código SQL [-]
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:
  1. la funcion GETDATE se ejecuta con GETDATE()
  2. y aqui el error fue mio se me olvido comentar que tienes que expresar la funcion anteponiendo el dBowner :D

quedaria el insert asi:


Código SQL [-]

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


La franja horaria es GMT +2. Ahora son las 17:56:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi