Problema con Consulta dinamica

19/05/2004 - 21:15 por sebas_camargo | Informe spam
Bueno le comento mi duda estoy ttratando de hacer un SP pero que sea
dinamico o sea que la consulta se genenre en tiempo de ejecucion, les
paso el codigo del SP

-
1- CREATE PROCEDURE [TasasMunicipalListarBoletas]
2- @buscarPor varchar(50),
3- @palabra varchar(50),
4- @ordenarPor varchar(50)
5- AS
6- DECLARE
7- @periodo as smalldatetime,
8- @orden as varchar(50),
9- @sql nvarchar(4000),
10- @numError int,
11- @errmsg varchar(255)
12- SET @numError = 0
13- SET @sql = 'SELECT contribuyente.apellido +
14- contribuyente.nombre AS contribuyente,
15- contribuyente.direccion AS direccionContribuyente,
16- propiedad.id AS idPropiedad,
17- propiedad.direccion AS direccionPropiedad,
18- propiedad.codigoPostal,
19- propiedad.codigo,
20- propiedad.barrio,
21- propiedad.casa,
22- propiedad.zona,
23- propiedad.manzana,
24- propiedad.seccion,
25- propiedad.parcela,
26- propiedad.metros,
27- propiedad.ancho,
28- propiedad.descuento,
29- boleta.*
30- FROM boleta,
31- contribuyente,
32- propiedad
33- WHERE boleta.idPropiedad=propiedad.id
34- AND propiedad.idContribuyente=contribuyente.id
35- AND '
36-
37- /*VERIFICO POR QUE SE DEBE BUSCAR*/
38- IF (@buscarPor='Periodo')
39- BEGIN
40- SET dateformat dmy
41- SET @periodo=@palabra
42- SET @sql =@sql + 'boleta.periodo=' + CAST(@periodo AS char(20))
43- END
44- ELSE IF (@buscarPor='Contribuyente')
45- BEGIN
46- SET @sql =@sql +'contribuyente.apellido + contribuyente.nombre
47- LIKE ''%' + @palabra + '%'''
48- END
49- ELSE IF (@buscarPor='Dirección de la Propiedad')
50- BEGIN
51- SET @sql =@sql + 'propiedad.direccion LIKE %'+ @palabra + '%'
52- END
53- ELSE IF (@buscarPor='Dirección del Contribuyente')
54- BEGIN
55- SET @sql =@sql + 'contribuyente.direccion LIKE %'+ @palabra + '%'
56- END
57- ELSE IF (@buscarPor='Padrón')
58- BEGIN
59- SET @sql =@sql + 'propiedad.codigo=' + @palabra
60- END
61- ELSE
62- BEGIN
63- SET dateformat dmy
64- SET @periodo=@palabra
65- SET @sql =@sql + 'boleta.periodo=' + @periodo
66- END
67-
68- /*VERIFICO POR QUE SE ORDENA*/
69- IF (@ordenarPor='Dirección de la Propiedad')
70- BEGIN
71- SET @sql =@sql +' ORDER BY propiedad.direccion'
72- END
73- ELSE IF (@ordenarPor='Dirección del Contribuyente')
74- BEGIN
75- SET @sql =@sql +' ORDER BY contribuyente.direccion'
76- END
77- ELSE IF (@ordenarPor='Contribuyente')
78- BEGIN
79- SET @sql =@sql +' ORDER BY contribuyente.apellido,
80- contribuyente.nombre'
81- END
82- ELSE IF (@ordenarPor='Padrón')
83- BEGIN
84- SET @sql =@sql +' ORDER BY propiedad.codigo'
85- END
86- ELSE IF (@ordenarPor='Neto')
87- BEGIN
88- SET @sql =@sql +' ORDER BY boleta.basico'
89- END
90- ELSE
91- BEGIN
92- SET @sql =@sql + ' ORDER BY boleta.id'
93- END
94- EXEC(@sql)
95- GO
-
el mayor problema lo tengo el las lines 46,47 ya debo hacer una
busqueda por apellido y nombre del contribuyente pero yo a dichos
datos los tengo en dos columnas distintas y yo al usuario solo le pido
que ingrese apellido y nombre, con la consulta comun no hay problema
pero con el EXEC me genera conflictos

el otro problema esta en la linea 13,14 en donde lo que quiero
regresar es el apellido y nombre pero como uno solo, de la forma que
lo tengo ahore me los devuelve pero todo junto. Lo que yo quisiera
hacer es retornarlos con un espacio en blanco entre el apellido y el
nombre ej Ahora retorna "PerezJuan" y yo quiero "Perez Juan"

Desde ya Muchisimas Gracias
 

Leer las respuestas

#1 poker
19/05/2004 - 21:23 | Informe spam
Lo de las líneas 13 y 14 es tan fácil como devolver:
contribuyente.apellido + ' ' + contribuyente.nombre AS contribuyente

Y lo de las líneas 46 y 47 te traerá problemas en cualquier caso si no
normalizas un poco la información.

"Sebastian" escribió en el mensaje
news:
Bueno le comento mi duda estoy ttratando de hacer un SP pero que sea
dinamico o sea que la consulta se genenre en tiempo de ejecucion, les
paso el codigo del SP

1- CREATE PROCEDURE [TasasMunicipalListarBoletas]
2- @buscarPor varchar(50),
3- @palabra varchar(50),
4- @ordenarPor varchar(50)
5- AS
6- DECLARE
7- @periodo as smalldatetime,
8- @orden as varchar(50),
9- @sql nvarchar(4000),
10- @numError int,
11- @errmsg varchar(255)
12- SET @numError = 0
13- SET @sql = 'SELECT contribuyente.apellido +
14- contribuyente.nombre AS contribuyente,
15- contribuyente.direccion AS direccionContribuyente,
16- propiedad.id AS idPropiedad,
17- propiedad.direccion AS direccionPropiedad,
18- propiedad.codigoPostal,
19- propiedad.codigo,
20- propiedad.barrio,
21- propiedad.casa,
22- propiedad.zona,
23- propiedad.manzana,
24- propiedad.seccion,
25- propiedad.parcela,
26- propiedad.metros,
27- propiedad.ancho,
28- propiedad.descuento,
29- boleta.*
30- FROM boleta,
31- contribuyente,
32- propiedad
33- WHERE boleta.idPropiedad=propiedad.id
34- AND propiedad.idContribuyente=contribuyente.id
35- AND '
36-
37- /*VERIFICO POR QUE SE DEBE BUSCAR*/
38- IF (@buscarPor='Periodo')
39- BEGIN
40- SET dateformat dmy
41- SET @periodo=@palabra
42- SET @sql =@sql + 'boleta.periodo=' + CAST(@periodo AS char(20))
43- END
44- ELSE IF (@buscarPor='Contribuyente')
45- BEGIN
46- SET @sql =@sql +'contribuyente.apellido + contribuyente.nombre
47- LIKE ''%' + @palabra + '%'''
48- END
49- ELSE IF (@buscarPor='Dirección de la Propiedad')
50- BEGIN
51- SET @sql =@sql + 'propiedad.direccion LIKE %'+ @palabra + '%'
52- END
53- ELSE IF (@buscarPor='Dirección del Contribuyente')
54- BEGIN
55- SET @sql =@sql + 'contribuyente.direccion LIKE %'+ @palabra + '%'
56- END
57- ELSE IF (@buscarPor='Padrón')
58- BEGIN
59- SET @sql =@sql + 'propiedad.codigo=' + @palabra
60- END
61- ELSE
62- BEGIN
63- SET dateformat dmy
64- SET @periodo=@palabra
65- SET @sql =@sql + 'boleta.periodo=' + @periodo
66- END
67-
68- /*VERIFICO POR QUE SE ORDENA*/
69- IF (@ordenarPor='Dirección de la Propiedad')
70- BEGIN
71- SET @sql =@sql +' ORDER BY propiedad.direccion'
72- END
73- ELSE IF (@ordenarPor='Dirección del Contribuyente')
74- BEGIN
75- SET @sql =@sql +' ORDER BY contribuyente.direccion'
76- END
77- ELSE IF (@ordenarPor='Contribuyente')
78- BEGIN
79- SET @sql =@sql +' ORDER BY contribuyente.apellido,
80- contribuyente.nombre'
81- END
82- ELSE IF (@ordenarPor='Padrón')
83- BEGIN
84- SET @sql =@sql +' ORDER BY propiedad.codigo'
85- END
86- ELSE IF (@ordenarPor='Neto')
87- BEGIN
88- SET @sql =@sql +' ORDER BY boleta.basico'
89- END
90- ELSE
91- BEGIN
92- SET @sql =@sql + ' ORDER BY boleta.id'
93- END
94- EXEC(@sql)
95- GO
el mayor problema lo tengo el las lines 46,47 ya debo hacer una
busqueda por apellido y nombre del contribuyente pero yo a dichos
datos los tengo en dos columnas distintas y yo al usuario solo le pido
que ingrese apellido y nombre, con la consulta comun no hay problema
pero con el EXEC me genera conflictos

el otro problema esta en la linea 13,14 en donde lo que quiero
regresar es el apellido y nombre pero como uno solo, de la forma que
lo tengo ahore me los devuelve pero todo junto. Lo que yo quisiera
hacer es retornarlos con un espacio en blanco entre el apellido y el
nombre ej Ahora retorna "PerezJuan" y yo quiero "Perez Juan"

Desde ya Muchisimas Gracias

Preguntas similares