Query Dinamico

01/07/2004 - 22:20 por Isaias Islas | Informe spam
Hola amigos todos

He escuchado mas de una vez que los Query's Dinamicos no deben utilizarse o
tratar de utilizarlos lo menos posible.

Esta pregunta ya la hice antes, ¿Como crear un STORE de Busqueda donde el
usuario tiene multiples opciones de busqueda?

Ejemplo: Buscando al CLIENTE por NOMBRE, CODIGO POSTAL o TELEFONO.

/* INICIO DE CODIGO
CREATE PROCEDURE pr_BuscandoCliente
@NOMBRE VARCHAR(60),
@CP CHAR(5),
@TELEFONO CHAR(10)
AS

SET NOCOUNT ON
DECLARE @SQLString NVARCHAR(1000), @WHERE NVARCHAR(100), @Count_rec INT

SET @WHERE = CASE
WHEN LEN(@NOMBRE) > 0 THEN ' WHERE cNombre LIKE ' + @NOMBRE + '%'
WHEN LEN(@CP) > 0 THEN ' WHERE cCP = ' + @CP
THEN ' WHERE TELEFONO = '+@TELEFONO END

SET @SQLString = N'SELECT @Count_rec = COUNT(CLIENTE.iCTEID) FROM CLIENTE '
+ @WHERE
EXEC sp_executesql @SQLString, N'@Count_rec INT OUTPUT', @Count_rec @Count_rec OUTPUT
IF @Count_rec = 0
BEGIN
SELECT -1, 'El Cliente no existe'
RETURN(0)
END

SET @SQLString = N'SELECT cNombre, cDireccion, cCP, cTelefono FROM CLIENTE '
+ @WHERE
EXEC sp_executesql @SQLString
IF @@ROWCOUNT = 0
BEGIN
SELECT -1, 'Error al obtener los datos del cliente.
RETURN(0)
END

*/ FIN DE CODIGO
 

Leer las respuestas

#1 MAXI
02/07/2004 - 00:23 | Informe spam
Hola, a ver si algo asi te es util

CREATE PROC PEPITO @PARAM1,@PARAM2 AS

SELECT CAMPOS FROM TABLA WHERE CAMPO1 LIKE CASE WHEN LEN(@PARAM1)=0 THEN '%'
ELSE @PARAM1 END AND
CAMPO2 LIKE CASE WHEN LEN(@PARAM2)=0 THEN '%' ELSE @PARAM2 END


==
Yo tengo 2 SP, uno para los AND y otro para los OR, en param pongo todos los
campos y en el select tambien!!

La verdad que lo he probado con gran cantidad de registro y funciona bien!!

Suerte



Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

MSN:


"Isaias Islas" escribió en el mensaje
news:%
Hola amigos todos

He escuchado mas de una vez que los Query's Dinamicos no deben utilizarse


o
tratar de utilizarlos lo menos posible.

Esta pregunta ya la hice antes, ¿Como crear un STORE de Busqueda donde el
usuario tiene multiples opciones de busqueda?

Ejemplo: Buscando al CLIENTE por NOMBRE, CODIGO POSTAL o TELEFONO.

/* INICIO DE CODIGO
CREATE PROCEDURE pr_BuscandoCliente
@NOMBRE VARCHAR(60),
@CP CHAR(5),
@TELEFONO CHAR(10)
AS

SET NOCOUNT ON
DECLARE @SQLString NVARCHAR(1000), @WHERE NVARCHAR(100), @Count_rec


INT

SET @WHERE = CASE
WHEN LEN(@NOMBRE) > 0 THEN ' WHERE cNombre LIKE ' + @NOMBRE + '%'
WHEN LEN(@CP) > 0 THEN ' WHERE cCP = ' + @CP
THEN ' WHERE TELEFONO = '+@TELEFONO END

SET @SQLString = N'SELECT @Count_rec = COUNT(CLIENTE.iCTEID) FROM CLIENTE


'
+ @WHERE
EXEC sp_executesql @SQLString, N'@Count_rec INT OUTPUT', @Count_rec > @Count_rec OUTPUT
IF @Count_rec = 0
BEGIN
SELECT -1, 'El Cliente no existe'
RETURN(0)
END

SET @SQLString = N'SELECT cNombre, cDireccion, cCP, cTelefono FROM CLIENTE


'
+ @WHERE
EXEC sp_executesql @SQLString
IF @@ROWCOUNT = 0
BEGIN
SELECT -1, 'Error al obtener los datos del cliente.
RETURN(0)
END

*/ FIN DE CODIGO


Preguntas similares