Tengo un procedimiento almacenado que da como resultado una selección de
varias vistas. Cuando lo ejecuto desde el Analizador de Consultas se
ejecuta correctamente. Pero al hacerlo desde Visual Basic con OLEDB y ADO
consume el tiempo de espera (hasta 3 minuto). Al hacer la traza se ve que
cuando se ejectua del Analizador de Consultas el plan de ejecución se
encuentra en el cahé y lo ejecuta. Pero cuando se ejecuta desde Visual
Basic no.
¿Alguna sugerencia?
Gracias!!!!!!
Para el procedimeinto almacenado T-SQL:
CREATE PROCEDURE SCSAdmin.PaSolAMiDivServInt
@Areas as varchar(500) = null,
@Division as integer=null,
@OpcionConsulta AS Integer = Null
AS
BEGIN
IF @OpcionConsulta = 1
SELECT IdSol, PSol, FechaRecSol, FechaLimiteSol, LaboratorioSol,
AreaS, NombreAreaSol,NombreRepresentante,
AreaO, NombreAreaOfe,
Fecha_Contestacion, DescServSol, DescServCot, ObservacionesSolAcep,
CASE CveTipServ WHEN 1 THEN Equipo WHEN 2 THEN NMR END AS
EquipoONMR,
Marca, Modelo, No_serie,Presentacion, Parametros,
Cantidad, CveTipServ, DescripcionTipServ, EstadoSol, DesEdoSolicitud,
EdoSolPorAtender, DescEdoSolPorAtender,-- IdCoti,
--EstadoCot, DesEdoCotizacion, IdProg,
EstadoProg, DesEdoProgramacion, EdoDetalleProg,DescEdoDetalleProg,
--CASE CveTipServ WHEN 1 THEN IdServ WHEN 2 THEN IdServMat END
IdServicio,
----CASE WHEN CveTipServ = 1 THEN IdCert WHEN CveTipServ = 2
THEN IdCertMR END AS IdCert,
--CASE WHEN CveTipServ = 1 THEN NoCert WHEN CveTipServ = 2 THEN
NoCertMR END AS NoCert,
--CASE WHEN CveTipServ = 1 THEN Entregable WHEN
CveTipServ = 2 THEN EntregableMR END AS FechaEntregaCert
IdRep, IdCte
FROM SCSAdmin.vConGralServInt2
WHERE (AreaO IN (SELECT * FROM SCSADMIN.LISTA(@Areas,',')) OR
@Areas is null)
and (SCSAdmin.vConGralServInt2.FechaRecSol >=
CONVERT(DATETIME, '2005-01-01 00:00:00', 102))
and (AreaS <> AreaO) and (EstadoSol='AS')
ORDER BY IdSol DESC
IF @OpcionConsulta =2
SELECT IdSol, PSol, FechaRecSol, FechaLimiteSol, LaboratorioSol,
AreaS, ...
...
IF @OpcionConsulta = 11
SELECT ...
END
---Si lo invoco desde el Analizador de consultas:----
EXECUTE SCSAdmin.PaSolAMiDivServInt 1,730
Ejecuta el procedimiento. Lo encuentra en el Cache y lo hace
inmediatamente.
---Si lo invoco desde Visual Basic----
Dim mRsPendientesMismaDivision As New ADODB.Recordset 'RecordSet
para la consulta general de solicitudes interna de la misma división
mRsPendientesEnviadosAMiDivision.CursorLocation = adUseClient
mRsPendientesEnviadosAMiDivision.Open "Execute
SCSAdmin.PaSolAMiDivServInt 1,730", gConnection, adOpenKeyset,
adLockOptimistic
Trata de ejecutar el procedimiento almacenado. Lo busca el plan de
ejecución en el Cache, no lo encuentra, trata de regenerar el plan de
ejecución y se tarda más de tres minutos. Si logrará generar el nuevo plan
de ejecución y se repite la consulta vuelve a generar el plan de ejecución.
"Isaias" <Isa...@discussions.microsoft.com> escribió en el mensaje
news:E72CB8AD-EE51-46DD...@microsoft.com...
Y decirnos si se tarda igual del tiempo
Vamos por parte.
1 - Lo primero que haria es particionar un poco ese procedimiento, para
hacerlo un poco mas legible, menos complicado para SQL Server y hasta para
otro propgramador que tenga que meter sus manos. Crea multiples
procedimientos, uno por cada caso.
...
IF @OpcionConsulta = 1
begin
exec dbo.p1 @p1, ..., @pn
...
end
IF @OpcionConsulta = 2
begin
exec dbo.p2 @p1, ..., @pn
...
end
...
2 - Ejecuta el procedimineto desde vb usando el objeto command
Calling a Stored Procedure with a Command
http://windowssdk.msdn.microsoft.com/en-us/library/ms676516.aspx
AMB
Desde VB al solicitar con WITH RECOMPILE no se puede ejecutar la
instrucción, a menos que se aumente el tiempo de espera.
"Isaias" <Isa...@discussions.microsoft.com> escribió en el mensaje
news:A0730B59-C6BF-49EB...@microsoft.com...
Gracias!
"Alejandro Mesa" <Alejan...@discussions.microsoft.com> escribió en el
mensaje news:EC6AEFCC-7F86-4E17...@microsoft.com...