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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 sebas_camargo
20/05/2004 - 05:06 | 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.




Lo que pasa yo esa forma que me decis que lo arregle a lo de ls lineas
13 y 14 funciona cuando haga la consulta directamente, pero no me
funciona cuando la armo y despues la executo

Con respecto a lo de las lineas 46 y 47 no entiendo a que te referis
con normalizar
Respuesta Responder a este mensaje
#3 sebas_camargo
20/05/2004 - 06:37 | Informe spam
Bueno les queria comentar que pude resolver el problema.
Por si no le quedaba claro mi problema era el siguiente:
El usuario realiza la siguiente busqueda por apellido y nombre: "Juan
Perea", pero yo el apellido y el nombre lo guardo en 2 campos
distintos uno apellido y otro nombre, bueno cuando uno realiza un
select directo eso no era problema ya que lo realizaba de la siguiente
formar nombreTabla.apellido + ' ' + nombreTabla.nombre like
@valoraBuscar + '%' ya que si el usuario ingresa Perez me debe
devolver todos lo Peres.
Bueno yo lo que queria hacer y gracias a dios lo hice era genererar
ahora la consulta en tiempo de ejecucion ya que el usuario es quien
decide por que campo desea buscar y por que campo desea ordenar los
resultados y eso lo hacia guardando la consulta en una variable de
tipo string y luego ejecutandola mediante el EXEC y el problema que se
me generaba era a la hora de buscar por apellido y nombre pero eso lo
soluciones de la siguiente manera(ver linea 46) uso +'' ''+ dentro del
string


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

Saludos
Sebastian
Respuesta Responder a este mensaje
#4 poker
20/05/2004 - 09:00 | Informe spam
Bueno, perdona, pero lo de duplicar las comillas lo dí por hecho, es
igual que en visual basic con las dobles comillas, que también hay que
duplicarlas y en C con los caracteres especiales precedidos de la barra
invertida \.
Pero insisto en que lo de las lineas 46 y 47 no te va a funcionar si el
usuario pone su nombre con tilde, o si lo pone todo en mayúsculas, o si por
cualquier motivo se le escapa una letra o inserta un espacio más o cambia de
orden nombre y apellido. Creo que no es una buena solución, aunque también
depende de para qué uses la búsqueda y si el usuario la puede repetir con
otros datos...

"Sebastian" escribió en el mensaje
news:
Bueno les queria comentar que pude resolver el problema.
Por si no le quedaba claro mi problema era el siguiente:
El usuario realiza la siguiente busqueda por apellido y nombre: "Juan
Perea", pero yo el apellido y el nombre lo guardo en 2 campos
distintos uno apellido y otro nombre, bueno cuando uno realiza un
select directo eso no era problema ya que lo realizaba de la siguiente
formar nombreTabla.apellido + ' ' + nombreTabla.nombre like
@valoraBuscar + '%' ya que si el usuario ingresa Perez me debe
devolver todos lo Peres.
Bueno yo lo que queria hacer y gracias a dios lo hice era genererar
ahora la consulta en tiempo de ejecucion ya que el usuario es quien
decide por que campo desea buscar y por que campo desea ordenar los
resultados y eso lo hacia guardando la consulta en una variable de
tipo string y luego ejecutandola mediante el EXEC y el problema que se
me generaba era a la hora de buscar por apellido y nombre pero eso lo
soluciones de la siguiente manera(ver linea 46) uso +'' ''+ dentro del
string


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
-


-

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