Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/01/2004, 18:18
OXIGENO
 
Fecha de Ingreso: febrero-2002
Mensajes: 442
Antigüedad: 22 años, 2 meses
Puntos: 2
Transact-SQL "sp_sqlexec" (Jorge Mota)

Hola... Estuve buscando en todo el foro sobre "sp_sqlexec" y la verdad que encontre un solo post que yo mismo habia dejado hace 1 año atras.. jijiji

El post era este: aqui

Bueno... Jorge, como veras recurro nuevamente a ti!

Me gustaria saber como trabaja el sp "sp_sqlexec" ya que en mi stored procedure tengo consultas muy grandes por lo que cuando ejecuto mi aplicacion (ASP) demora unos segundos en obtener una respuesta. (lo estoy testeando a nivel local y tengo buenos recursos de hard.)
Yo pregunto si el sp_sqlexec tiene que compilar la consulta e interpretarla antes de enviar la respuesta... de ser asi estimaria que mi problema de demora reside justamente en la ejecucion de lotes muy grandes.

ejemplo: (para que vean que no miento)
Cita:
@cComando AS char(5000)
IF @param = 1 BEGIN -- SI ES 1 TRABAJA CON TEMPORALES
IF @TempTable IS NOT NULL BEGIN --si parametro no es vacio
IF EXISTS(SELECT sysobjects.name FROM sysobjects WHERE NAME = @TempTable) BEGIN
SELECT @STATUS="'EL NUMERO DE AFILIADO YA EXISTE.-'"
-- --si existe tabla temporal.... y si nro de afiliado no existe en la temporal... inserto nuevo registro; y si no... hago un select de la temporal
SELECT @cComando ="IF NOT EXISTS(SELECT Id_item FROM " +@TempTable+ " WHERE NROAFILIADO="+@nroAfiliado+" and Id_item like ' % ') BEGIN
INSERT INTO " +@TempTable+"(retencion,nropliquida,tipoliquida,an ioliquida,mesliquida,aniocliquida,mescliquida"+",n roAfiliado,apellNombre,CodAJubila,sMinJub,CargoLiq uida,TipoDocu,NroDocu,AnioAntigu,RemunCApo,Devoluc CApo,SueldAnualC"+",Baja,DiasLiquid,DiasSubro,Cant Jornal,SituaRevista,TareaDiferenc,FechaIn,FechaVen cCon,AportJubil,ReajApoPer,ContribJubil"+",DescSeg urObl,DescSegurOT,DescSegurOC,DescSegurOF,DescSegu rCony,PrimasPatroART) VALUES('"+@retencion+"','"+@nropliquida+"','"+@tip oliquida+"','"+@anioliquida+"','"+@mesliquida+"',' "+@aniocliquida+"','"+@mescliquida+"','"+@nroAfili ado+"','"+@apellNombre+"','"+@CodAJubila+"','"+@sM inJub+"','"+@CargoLiquida+"','"+@TipoDocu+"','"+@N roDocu+"','"+@AnioAntigu+"','"+@RemunCApo+"','"+@D evolucCApo+"','"+@SueldAnualC+"','"+@Baja+"','"+@D iasLiquid+"','"+@DiasSubro+"','"+@CantJornal+"','" +@SituaRevista+"','"+@TareaDiferenc+"','"+@FechaIn +"','"+@FechaVencCon+"','"+@AportJubil+"','"+@Reaj ApoPer+"','"+@ContribJubil+"','"+@DescSegurObl+"', '"+@DescSegurOT+"','"+@DescSegurOC+"','"+@DescSegu rOF+"','"+@DescSegurCony+"','"+@PrimasPatroART+"')
SELECT " + @TempTable + ".Id_item, " + @TempTable + ".retencion, " + @TempTable + ".nropliquida, " + @TempTable + ".tipoliquida, " + @TempTable + ".anioliquida, " + @TempTable + ".mesliquida, " + @TempTable + ".aniocliquida, " + @TempTable + ".mescliquida, " + @TempTable + ".nroAfiliado, " + @TempTable + ".apellNombre, " + @TempTable + ".CodAJubila, " + @TempTable + ".sMinJub, " + @TempTable + ".CargoLiquida, " + @TempTable + ".TipoDocu, " + @TempTable + ".NroDocu, " + @TempTable + ".AnioAntigu, " + @TempTable + ".RemunCApo, " + @TempTable + ".DevolucCApo, " + @TempTable + ".SueldAnualC, " + @TempTable + ".Baja, " + @TempTable + ".DiasLiquid, " + @TempTable + ".DiasSubro, " + @TempTable + ".CantJornal, " + @TempTable + ".SituaRevista, " + @TempTable + ".TareaDiferenc, " + @TempTable + ".FechaIn, " + @TempTable + ".FechaVencCon, " + @TempTable + ".AportJubil, " + @TempTable + ".ReajApoPer, " + @TempTable + ".ContribJubil, " + @TempTable + ".DescSegurObl, " + @TempTable + ".DescSegurOT, " + @TempTable + ".DescSegurOC, " + @TempTable + ".DescSegurOF, " + @TempTable + ".DescSegurCony, " + @TempTable + ".PrimasPatroART FROM "+ @TempTable + " ORDER BY " + @TempTable + ".Id_item DESC
END
ELSE BEGIN
SELECT " + @TempTable + ".Id_item, " + @TempTable + ".retencion, " + @TempTable + ".nropliquida, " + @TempTable + ".tipoliquida, " + @TempTable + ".anioliquida, " + @TempTable + ".mesliquida, " + @TempTable + ".aniocliquida, " + @TempTable + ".mescliquida, " + @TempTable + ".nroAfiliado, " + @TempTable + ".apellNombre, " + @TempTable + ".CodAJubila, " + @TempTable + ".sMinJub, " + @TempTable + ".CargoLiquida, " + @TempTable + ".TipoDocu, " + @TempTable + ".NroDocu, " + @TempTable + ".AnioAntigu, " + @TempTable + ".RemunCApo, " + @TempTable + ".DevolucCApo, " + @TempTable + ".SueldAnualC, " + @TempTable + ".Baja, " + @TempTable + ".DiasLiquid, " + @TempTable + ".DiasSubro, " + @TempTable + ".CantJornal, " + @TempTable + ".SituaRevista, " + @TempTable + ".TareaDiferenc, " + @TempTable + ".FechaIn, " + @TempTable + ".FechaVencCon, " + @TempTable + ".AportJubil, " + @TempTable + ".ReajApoPer, " + @TempTable + ".ContribJubil, " + @TempTable + ".DescSegurObl, " + @TempTable + ".DescSegurOT, " + @TempTable + ".DescSegurOC, " + @TempTable + ".DescSegurOF, " + @TempTable + ".DescSegurCony, " + @TempTable + ".PrimasPatroART FROM "+ @TempTable + " ORDER BY " + @TempTable + ".Id_item DESC
END"
EXEC sp_sqlexec @cComando
END
ELSE BEGIN
--SI NO EXISTE LA TEMPORAL, LA CREO
SELECT @cComando ='Create Table '+@TempTable+' (ID_item INT IDENTITY(1,1),retencion int,nropliquida int,tipoliquida char(1),anioliquida int,mesliquida int'+',aniocliquida int,mescliquida int,nroAfiliado numeric(18,0),apellNombre char(50),CodAJubila numeric(18,0),sMinJub char(2),CargoLiquida numeric(18,0),TipoDocu int,'+'NroDocu numeric(18,0),AnioAntigu int,RemunCApo numeric(18,0),DevolucCApo numeric(18,0),SueldAnualC numeric(18,0),Baja char(4),DiasLiquid numeric(18,0),DiasSubro numeric(18,0),CantJornal numeric(18,0),SituaRevista char(1)'+',TareaDiferenc char(1),FechaIn DATETIME,FechaVencCon DATETIME,AportJubil numeric(18,0),ReajApoPer numeric(18,0),ContribJubil numeric(18,0),DescSegurObl numeric(18,0),DescSegurOT numeric(18,0),DescSegurOC numeric(18,0),DescSegurOF numeric(18,0),DescSegurCony numeric(18,0),PrimasPatroART numeric(18,0))'
EXEC sp_sqlexec @cComando
--VERIFICO SI HAY ALGUN REG EN LA TABLA LIQUIDA QUE COINCIDA CON LIQUIDACION ACTUAL; si coincide alguno... los copia a la TEMPORAL
IF EXISTS(SELECT Id_item FROM LIQUIDA WHERE RETENCION = @retencion and NROPLIQUIDA = @nropliquida and TIPOLIQUIDA = @tipoliquida and ANIOLIQUIDA = @anioliquida or Id_item like ' % ') BEGIN
SELECT @cComando ="INSERT INTO " + @TempTable + " (retencion,nropliquida,tipoliquida,anioliquida,mes liquida,aniocliquida,mescliquida"+",nroAfiliado,ap ellNombre,CodAJubila,sMinJub,CargoLiquida,TipoDocu ,NroDocu,AnioAntigu,RemunCApo,DevolucCApo,SueldAnu alC"+",Baja,DiasLiquid,DiasSubro,CantJornal,SituaR evista,TareaDiferenc,FechaIn,FechaVencCon,AportJub il,ReajApoPer,ContribJubil"+",DescSegurObl,DescSeg urOT,DescSegurOC,DescSegurOF,DescSegurCony,PrimasP atroART)" +
" SELECT retencion,nropliquida,tipoliquida,anioliquida,mesl iquida,aniocliquida,mescliquida"+",nroAfiliado,ape llNombre,CodAJubila,sMinJub,CargoLiquida,TipoDocu, NroDocu,AnioAntigu,RemunCApo,DevolucCApo,SueldAnua lC"+",Baja,DiasLiquid,DiasSubro,CantJornal,SituaRe vista,TareaDiferenc,FechaIn,FechaVencCon,AportJubi l,ReajApoPer,ContribJubil"+",DescSegurObl,DescSegu rOT,DescSegurOC,DescSegurOF,DescSegurCony,PrimasPa troART FROM LIQUIDA WHERE RETENCION = " + @retencion + " and NROPLIQUIDA = " + @nropliquida +" and TIPOLIQUIDA = '" +@tipoliquida + "' and ANIOLIQUIDA= "+ @anioliquida+ "
SELECT " + @TempTable + ".Id_item, " + @TempTable + ".retencion, " + @TempTable + ".nropliquida, " + @TempTable + ".tipoliquida, " + @TempTable + ".anioliquida, " + @TempTable + ".mesliquida, " + @TempTable + ".aniocliquida, " + @TempTable + ".mescliquida, " + @TempTable + ".nroAfiliado, " + @TempTable + ".apellNombre, " + @TempTable + ".CodAJubila, " + @TempTable + ".sMinJub, " + @TempTable + ".CargoLiquida, " + @TempTable + ".TipoDocu, " + @TempTable + ".NroDocu, " + @TempTable + ".AnioAntigu, " + @TempTable + ".RemunCApo, " + @TempTable + ".DevolucCApo, " + @TempTable + ".SueldAnualC, " + @TempTable + ".Baja, " + @TempTable + ".DiasLiquid, " + @TempTable + ".DiasSubro, " + @TempTable + ".CantJornal, " + @TempTable + ".SituaRevista, " + @TempTable + ".TareaDiferenc, " + @TempTable + ".FechaIn, " + @TempTable + ".FechaVencCon, " + @TempTable + ".AportJubil, " + @TempTable + ".ReajApoPer, " + @TempTable + ".ContribJubil, " + @TempTable + ".DescSegurObl, " + @TempTable + ".DescSegurOT, " + @TempTable + ".DescSegurOC, " + @TempTable + ".DescSegurOF, " + @TempTable + ".DescSegurCony, " + @TempTable + ".PrimasPatroART FROM "+ @TempTable + " ORDER BY " + @TempTable + ".Id_item DESC"
EXEC sp_sqlexec @cComando
END
ELSE BEGIN
-- si no hay ninguna liquidacion anterior que coincida con la actual... la puede crear el usuario como nueva....
-- despliega mensaje 'sin coincidencias' y queda a la espera de insersion de registros por parte del usuario
SELECT @STATUS = 'INGRESO MANUAL.-'
SELECT @STATUS
END
END
END
ELSE BEGIN
SELECT @STATUS = 'EL NOMBRE DE LA TABLA ES NULO.-'
SELECT @STATUS
END
END


Bueno... no te preocupes que funcion a la perfeccion... pero es simplemente una pregunta curiosa.... espero que puedas ayudarme!
__________________
tech-nico.com