Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/11/2013, 13:48
loser213
 
Fecha de Ingreso: noviembre-2013
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
Sql server dinámico

Señores, de antemano gracias por la ayuda que me puedan brindar. Soy nuevo en el foro y mi consulta es la siguiente, estoy creando una query dinámicamente en un procedimiento, a continuación dejo el código:

Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[SEL_USUARIO_BY_SEARCH] @Departamento NVARCHAR(50), @Usuario NVARCHAR(50),
  2. @Nombre NVARCHAR(128) AS
  3.     DECLARE @SQL NVARCHAR(4000)
  4.     SET @SQL = 'SELECT U.IdUsuario, U.Departamento, D.NombreDepartamento, U.NickUsuario, U.ContrasegnaUsuario,
  5.         U.NombresUsuario + '' '' + U.PrimerApellidoUsuario + '' '' + U.SegundoApellidoUsuario Usuario,
  6.         U.EmailUsuario, U.TelefonoUsuario, CONVERT(VARCHAR, U.FechaIngresoUsuario, 103) FechaIngreso,
  7.         CONVERT(VARCHAR, U.UltimoIngresoUsuario, 103) UltimoIngreso, U.ImagenUsuario
  8.         FROM Usuarios U INNER JOIN Departamentos D ON U.Departamento = D.IdDepartamento
  9.         WHERE 1 = 1'
  10.     IF @Departamento IS NOT NULL AND @Departamento <> ''
  11.     BEGIN
  12.         SET @SQL = @SQL + ' AND (D.NombreDepartamento LIKE ''%\' + Quotename(@Departamento,'''') + '%'' ESCAPE ''\''
  13.         OR D.NombreDepartamento LIKE ''%_' + Quotename(@Departamento,'''') + '%'' ESCAPE ''_'')'
  14.     END
  15.     IF @Usuario IS NOT NULL AND @Usuario <> ''
  16.     BEGIN
  17.         SET @Sql = @Sql + ' AND (U.NickUsuario LIKE ''%\' + Quotename(@Usuario,'''') + '%'' ESCAPE ''\''
  18.         OR U.NickUsuario LIKE ''%_' + Quotename(@Usuario,'''') + '%'' ESCAPE ''_'')'
  19.     END
  20.     IF @Nombre IS NOT NULL AND @Nombre <> ''
  21.     BEGIN
  22.         SET @Sql = @Sql + ' AND (U.NombresUsuario' + ' ' + 'U.PrimerApellidoUsuario' + ' ' + 'U.SegundoApellidoUsuario LIKE ''%\' + Quotename(@Nombre,'''') + '%'' ESCAPE ''\''
  23.         OR U.NombresUsuario' + ' ' + 'U.PrimerApellidoUsuario' + ' ' + 'U.SegundoApellidoUsuario LIKE ''%_' + Quotename(@Nombre,'''') + '%'' ESCAPE ''_'')'
  24.     END
  25.     SET @Sql = @Sql + ' ORDER BY U.NickUsuario ASC'
  26.     BEGIN TRAN
  27.         PRINT @Sql
  28.         --EXEC(@Sql)
  29.     COMMIT TRAN
  30. END

Al ejecutar (por ejemplo EXEC SEL_USUARIO_BY_SEARCH 'P', 'r', 'r') el resultado es el siguiente:

Código SQL:
Ver original
  1. SELECT U.IdUsuario, U.Departamento, D.NombreDepartamento, U.NickUsuario, U.ContrasegnaUsuario,
  2. U.NombresUsuario + ' ' + U.PrimerApellidoUsuario + ' ' + U.SegundoApellidoUsuario Usuario,
  3. U.EmailUsuario, U.TelefonoUsuario, CONVERT(VARCHAR, U.FechaIngresoUsuario, 103) FechaIngreso,
  4. CONVERT(VARCHAR, U.UltimoIngresoUsuario, 103) UltimoIngreso, U.ImagenUsuario
  5. FROM Usuarios U INNER JOIN Departamentos D ON U.Departamento = D.IdDepartamento
  6. WHERE 1 = 1 AND (D.NombreDepartamento LIKE '%\'P'%' ESCAPE '\'
  7. OR D.NombreDepartamento LIKE '%_'P'%' ESCAPE '_') AND (U.NickUsuario LIKE '%\'r'%' ESCAPE '\'
  8. OR U.NickUsuario LIKE '%_'r'%' ESCAPE '_') AND (U.NombresUsuario U.PrimerApellidoUsuario U.SegundoApellidoUsuario LIKE '%\'r'%' ESCAPE '\'
  9. OR U.NombresUsuario U.PrimerApellidoUsuario U.SegundoApellidoUsuario LIKE '%_'r'%' ESCAPE '_') ORDER BY U.NickUsuario ASC

Se puede observar que la consulta es correcta, con la excepción de que los parámetros enviados quedan entre comillas, por lo cual nunca me dará resultado alguno.

Ojalá se pueda solucionar. Gracias.

Última edición por gnzsoloyo; 27/11/2013 a las 16:25