Consejos para procedimientos almacenados

11/05/2005 - 20:26 por Jose Antonio | Informe spam
El procedimiento almacenado que os adjunto lo hago para evitar sql dinamico,
pero no se si es recomendable o no.

CREATE PROCEDURE [DR_LIQUIDACIONES]

@ANO AS VARCHAR(4),
@PARTE1 AS INT,
@PARTE2 AS INT,
@FECHA1 AS VARCHAR(8),
@FECHA2 AS VARCHAR(8),
@DOBLA1 AS INT,
@DOBLA2 AS INT
AS
SET NOCOUNT ON
IF @PARTE1!='' SELECT DOBLA FROM LIDOBLA WHERE ANO=@ANO AND NUMERO>=@PARTE1
AND NUMERO<=@PARTE2 AND ANULADA!='S' ORDER BY FECHA
ELSE IF @FECHA1!='' SELECT DOBLA FROM LIDOBLA WHERE FECHA>=@FECHA1 AND
FECHA<=@FECHA2 AND ANULADA!='S' ORDER BY FECHA
ELSE SELECT DOBLA FROM LIDOBLA WHERE DOBLA>=@DOBLA1 AND DOBLA<=@DOBLA2 AND
ANULADA!='S' ORDER BY FECHA

como veis dependiendo de que parametros estan o no vacios se hace un select
u otro.

No se si de esta manera Sql server guarda algun plan de ejecución.

¿Cual sería la buena práctica para realizar este procedimiento?. Quizas 3
procedimientos diferentes?

Saludos.

Preguntas similare

Leer las respuestas

#1 Maxi
11/05/2005 - 20:32 | Informe spam
hola revisa unos hilos mas abajo "para maxi"


Salu2
Maxi


"Jose Antonio" escribió en el mensaje
news:
El procedimiento almacenado que os adjunto lo hago para evitar sql
dinamico, pero no se si es recomendable o no.

CREATE PROCEDURE [DR_LIQUIDACIONES]

@ANO AS VARCHAR(4),
@PARTE1 AS INT,
@PARTE2 AS INT,
@FECHA1 AS VARCHAR(8),
@FECHA2 AS VARCHAR(8),
@DOBLA1 AS INT,
@DOBLA2 AS INT
AS
SET NOCOUNT ON
IF @PARTE1!='' SELECT DOBLA FROM LIDOBLA WHERE ANO=@ANO AND
NUMERO>=@PARTE1 AND NUMERO<=@PARTE2 AND ANULADA!='S' ORDER BY FECHA
ELSE IF @FECHA1!='' SELECT DOBLA FROM LIDOBLA WHERE FECHA>=@FECHA1 AND
FECHA<=@FECHA2 AND ANULADA!='S' ORDER BY FECHA
ELSE SELECT DOBLA FROM LIDOBLA WHERE DOBLA>=@DOBLA1 AND DOBLA<=@DOBLA2 AND
ANULADA!='S' ORDER BY FECHA

como veis dependiendo de que parametros estan o no vacios se hace un
select u otro.

No se si de esta manera Sql server guarda algun plan de ejecución.

¿Cual sería la buena práctica para realizar este procedimiento?. Quizas 3
procedimientos diferentes?

Saludos.

Respuesta Responder a este mensaje
#2 Alejandro Mesa
11/05/2005 - 20:56 | Informe spam
Jose Antonio,

Yo recomendaria crear tres procedimientos almacenados, pues la busqueda que
se hace es distinta en dependencia a los parametros de entrada y ellos no
estan relacionados entre si.


AMB

"Jose Antonio" wrote:

El procedimiento almacenado que os adjunto lo hago para evitar sql dinamico,
pero no se si es recomendable o no.

CREATE PROCEDURE [DR_LIQUIDACIONES]

@ANO AS VARCHAR(4),
@PARTE1 AS INT,
@PARTE2 AS INT,
@FECHA1 AS VARCHAR(8),
@FECHA2 AS VARCHAR(8),
@DOBLA1 AS INT,
@DOBLA2 AS INT
AS
SET NOCOUNT ON
IF @PARTE1!='' SELECT DOBLA FROM LIDOBLA WHERE ANO=@ANO AND NUMERO>=@PARTE1
AND NUMERO<=@PARTE2 AND ANULADA!='S' ORDER BY FECHA
ELSE IF @FECHA1!='' SELECT DOBLA FROM LIDOBLA WHERE FECHA>=@FECHA1 AND
FECHA<=@FECHA2 AND ANULADA!='S' ORDER BY FECHA
ELSE SELECT DOBLA FROM LIDOBLA WHERE DOBLA>=@DOBLA1 AND DOBLA<=@DOBLA2 AND
ANULADA!='S' ORDER BY FECHA

como veis dependiendo de que parametros estan o no vacios se hace un select
u otro.

No se si de esta manera Sql server guarda algun plan de ejecución.

¿Cual sería la buena práctica para realizar este procedimiento?. Quizas 3
procedimientos diferentes?

Saludos.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida