Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema con Stored Procedures

Estas en el tema de Problema con Stored Procedures en el foro de SQL Server en Foros del Web. Hola, estoy programando en ASP.NET con SQL Server, y todo funcionaba bien, hasta que decidi empezar a usar Stored Procedures. Tengo un problema con el ...
  #1 (permalink)  
Antiguo 20/04/2010, 14:17
 
Fecha de Ingreso: noviembre-2007
Mensajes: 7
Antigüedad: 16 años, 5 meses
Puntos: 0
Problema con Stored Procedures

Hola, estoy programando en ASP.NET con SQL Server, y todo funcionaba bien, hasta que decidi empezar a usar Stored Procedures. Tengo un problema con el 'like', ya que parece que cuando se lo usa normalmente en una consulta funciona bien, pero cuando se lo usa en combinacion con parametros no.

Esta es un ejemplo de una consulta, la cual funciona sin problemas, usando la BD pubs:

___________


select * from dbo.authors where state like 'CA' and zip like '946%'

___________


Sin embargo, cuando la escribo como un stored procedure, me da problemas.
Este es mi Stored Procedure:

___________________________


Alter Procedure PrimeraConsulta
(@state char(2), @zip char(5))
as

select * from dbo.authors
where ((state like case when @state is null then state else @state end)
and
(zip like case when @zip is null then zip else (@zip + '%') end))

________________________

exec PrimeraConsulta 'CA', '946%'

_________________________


Lo que quiero hacer es poder especificar el estado, y en cuanto al zip, basta con escribir los primeros dígitos, y por eso uso la sentencia 'like' junto con el '%'
Tambien, use un 'case end' para que si el parametro es dejado vacio, no se lo tome en cuenta.

Gracias de antemano
  #2 (permalink)  
Antiguo 20/04/2010, 15:07
 
Fecha de Ingreso: octubre-2006
Mensajes: 88
Antigüedad: 17 años, 6 meses
Puntos: 1
Respuesta: Problema con Stored Procedures

LO QUE ESTAS HACIENDO AL EJECUTAR exec PrimeraConsulta 'CA', '946%' ES ESTO


select * from dbo.authors
where ((state like case when 'CA' is null then state else 'CA' end)
and
(zip like case when '946' is null then zip else ('946%' + '%') end))




LO QUE DEBES HACER ES ESTO exec PrimeraConsulta 'CA', '946'

select * from dbo.authors
where ((state like case when @state is null then state else (@state + '%') end)
and
(zip like case when @zip is null then zip else (@zip + '%') end))


CON ESTO AL EJECUTAR TU SP SERIA ALGO COMO ESTO:

select * from dbo.authors
where ((state like case when 'CA' is null then state else ('CA' + '%') end)
and
(zip like case when '946' is null then zip else ('946%' + '%') end))
  #3 (permalink)  
Antiguo 20/04/2010, 15:18
 
Fecha de Ingreso: noviembre-2007
Mensajes: 7
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problema con Stored Procedures

Lo siento, escribi mal la muestra, pero ya la corregi, y sigo teniendo el mismo problema, no se me muestra ningun registro al ejecutar el stored procedure. Alguna otra idea?
  #4 (permalink)  
Antiguo 20/04/2010, 15:52
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Respuesta: Problema con Stored Procedures

Usa el tipo de dato adecuado para tus parámetros.
Al declarar @zip como CHAR(5), no importa si pones uno o cuatro caracteres, el parámetro siempre tendra una longitud de cinco donde el resto de los caracteres se completan con espacios.
Así, al pasar '946' la comparación final se hace contra '946 %'.
Usa VARCHAR(5).

Saludos.

Etiquetas: procedures, stored
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:32.