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

[SOLUCIONADO] Problemas con IF ELSE en SQL-SERVER

Estas en el tema de Problemas con IF ELSE en SQL-SERVER en el foro de SQL Server en Foros del Web. Hola y saludos, Tengo un procedimiento almacenado donde pregunto por el valor de un parametro y dependiendo de su valor hago el respectivo SELECT Cita: ...
  #1 (permalink)  
Antiguo 06/11/2013, 19:42
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 12 años, 3 meses
Puntos: 3
Pregunta Problemas con IF ELSE en SQL-SERVER

Hola y saludos,

Tengo un procedimiento almacenado donde pregunto por el valor de un parametro y dependiendo de su valor hago el respectivo SELECT
Cita:
CREATE PROCEDURE [dbo].spSEARCH_MAS
@Player VARCHAR(10),
@Name VARCHAR(50),
@LastName VARCHAR(50),
@Email VARCHAR(50),
@Password VARCHAR(50),
@Phone VARCHAR(50),
@Zip VARCHAR(50),
@Status CHAR(1)
AS
BEGIN
DECLARE @CREATE_TLB_TEMP NVARCHAR(MAX) -- QUERY TO CREATE THE TEMPORARY TABLE
DECLARE @QUERY_SEARCH NVARCHAR(MAX) -- QUERY THAT PERFORMED THE SEARCHING

IF OBJECT_ID('tempDB..#PlayerTemp','U') IS NOT NULL
DROP TABLE #PlayerTemp;

SET @CREATE_TLB_TEMP = 'SELECT IdPlayer, Player, Name, LastName, Email, Password, IdBook INTO #PlayerTemp FROM PLAYER '

IF (@Status <> 'E' AND @Status <> 'D') BEGIN
SET @CREATE_TLB_TEMP = @CREATE_TLB_TEMP + 'WHERE Player LIKE %'+@Player+'% AND Name LIKE %'+@Name+'%
AND LastName LIKE %'+@LastName+'% AND Email LIKE %'+@Email+'%
AND Password LIKE %'+@Password+'% AND Phone LIKE %'+@Phone+'%
AND Zip LIKE %'+@Zip+'%'
END
ELSE BEGIN
SET @CREATE_TLB_TEMP = @CREATE_TLB_TEMP + 'WHERE Player LIKE %'+@Player+'% AND Name LIKE %'+@Name+'%
AND LastName LIKE %'+@LastName+'% AND Email LIKE %'+@Email+'%
AND Password LIKE %'+@Password+'% AND Phone LIKE %'+@Phone+'%
AND Zip LIKE %'+@Zip+'% AND Status = '+@Status
END

EXEC sp_executesql @CREATE_TLB_TEMP
END
Al ejecutar el procedimiento para crearlo no me da error
Cita:
EXEC [dbo].spSEARCH_MAS '','test','','','','','','D'
Pero al ejecutar pasandole los parámetros para hacerlo funcionar como pretendo me da este error

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'AND'.
  #2 (permalink)  
Antiguo 06/11/2013, 22:22
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Problemas con IF ELSE en SQL-SERVER

El mensaje de error llego probablemente del sp_executesql.
Es muy recomendable agregar la instrucción Print @CREATE_TLB_TEMP; antes le ejecución para que puedamos verlo (el parámetro).

Me parece que el problema es lo siguiente:
la clausula Where que construís es WHERE Player LIKE %MiJugador% AND Name LIKE %MiNombre%... y debe ser WHERE Player LIKE '%MiJugador%' AND Name LIKE '%MiNombre%'....

Por lo tanto el código debe ser más o menos así:
Código SQL:
Ver original
  1. SET @CREATE_TLB_TEMP = @CREATE_TLB_TEMP + 'WHERE Player LIKE ''%'+@Player+'%'' AND Name LIKE ''%'+@Name+'%''...
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 07/11/2013, 09:13
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 12 años, 3 meses
Puntos: 3
Pregunta Respuesta: Problemas con IF ELSE en SQL-SERVER

Me sirvio prefectamente amigo gracias, pero tengo una duda... Existe algun error o inconveniente si dejo LIKE '%%' lo que pasa es que en algunos casos puede ser que lo quiera buscar por nombre o apellidos pero no digite por ejemplo el numero telefonico, entonces en este caso @Phnumber seria LIKE '%%' .

Nota: Pregunto esto ya que realice este select:

Código SQL:
Ver original
  1. SELECT IdPlayer, Player, Name, LastName, Email, Password, IdBook
  2. FROM PLAYER
  3. WHERE Player LIKE '%%' AND Name LIKE '%test%' AND LastName LIKE '%testing%' AND Email  LIKE '%%' AND Password LIKE '%%' AND Phone LIKE '%%' AND Zip LIKE '%%' AND STATUS = 'D'
me retorna 635 rows

Y luego hice la misma consulta pero solo con los datos que se llenaron osea:
Código SQL:
Ver original
  1. SELECT IdPlayer, Player, Name, LastName, Email, Password, IdBook
  2. FROM [DGSDATA_DEV].[dbo].[PLAYER]
  3. WHERE Name LIKE '%test%' AND LastName LIKE '%testing%' AND STATUS='D'
me retorna 1509 rows
A que se debe esto ?

Última edición por gnzsoloyo; 07/11/2013 a las 09:24
  #4 (permalink)  
Antiguo 07/11/2013, 10:20
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Problemas con IF ELSE en SQL-SERVER

Puede ser que en algunas columnas hay nulos (Null).
La condicion Where .. Like '%%' devuelve todas las cadenas, pero no nulos.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #5 (permalink)  
Antiguo 07/11/2013, 10:27
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 12 años, 3 meses
Puntos: 3
Pregunta Respuesta: Problemas con IF ELSE en SQL-SERVER

Entonces de que forma podria solucionar esto amigo ?
  #6 (permalink)  
Antiguo 07/11/2013, 10:30
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Problemas con IF ELSE en SQL-SERVER

Por ejemplo asi:
Where IsNull(Email,'') LIKE '%%'
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #7 (permalink)  
Antiguo 07/11/2013, 10:33
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 12 años, 3 meses
Puntos: 3
De acuerdo Respuesta: Problemas con IF ELSE en SQL-SERVER

Gracias amigo me sirvio de pelos

Etiquetas: almacenado, procedimiento, select, valor
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 01:39.