Código SQL:
Ver original
ALTER PROCEDURE [dbo].[SEL_USUARIO_BY_SEARCH] @Departamento NVARCHAR(50), @Usuario NVARCHAR(50), @Nombre NVARCHAR(128) AS DECLARE @SQL NVARCHAR(4000) SET @SQL = 'SELECT U.IdUsuario, U.Departamento, D.NombreDepartamento, U.NickUsuario, U.ContrasegnaUsuario, U.NombresUsuario + '' '' + U.PrimerApellidoUsuario + '' '' + U.SegundoApellidoUsuario Usuario, U.EmailUsuario, U.TelefonoUsuario, CONVERT(VARCHAR, U.FechaIngresoUsuario, 103) FechaIngreso, CONVERT(VARCHAR, U.UltimoIngresoUsuario, 103) UltimoIngreso, U.ImagenUsuario FROM Usuarios U INNER JOIN Departamentos D ON U.Departamento = D.IdDepartamento WHERE 1 = 1' IF @Departamento IS NOT NULL AND @Departamento <> '' BEGIN SET @SQL = @SQL + ' AND (D.NombreDepartamento LIKE ''%\' + Quotename(@Departamento,'''') + '%'' ESCAPE ''\'' OR D.NombreDepartamento LIKE ''%_' + Quotename(@Departamento,'''') + '%'' ESCAPE ''_'')' END IF @Usuario IS NOT NULL AND @Usuario <> '' BEGIN SET @Sql = @Sql + ' AND (U.NickUsuario LIKE ''%\' + Quotename(@Usuario,'''') + '%'' ESCAPE ''\'' OR U.NickUsuario LIKE ''%_' + Quotename(@Usuario,'''') + '%'' ESCAPE ''_'')' END IF @Nombre IS NOT NULL AND @Nombre <> '' BEGIN SET @Sql = @Sql + ' AND (U.NombresUsuario' + ' ' + 'U.PrimerApellidoUsuario' + ' ' + 'U.SegundoApellidoUsuario LIKE ''%\' + Quotename(@Nombre,'''') + '%'' ESCAPE ''\'' OR U.NombresUsuario' + ' ' + 'U.PrimerApellidoUsuario' + ' ' + 'U.SegundoApellidoUsuario LIKE ''%_' + Quotename(@Nombre,'''') + '%'' ESCAPE ''_'')' END SET @Sql = @Sql + ' ORDER BY U.NickUsuario ASC' BEGIN TRAN PRINT @Sql --EXEC(@Sql) COMMIT TRAN END
Al ejecutar (por ejemplo EXEC SEL_USUARIO_BY_SEARCH 'P', 'r', 'r') el resultado es el siguiente:
Código SQL:
Ver original
SELECT U.IdUsuario, U.Departamento, D.NombreDepartamento, U.NickUsuario, U.ContrasegnaUsuario, U.NombresUsuario + ' ' + U.PrimerApellidoUsuario + ' ' + U.SegundoApellidoUsuario Usuario, U.EmailUsuario, U.TelefonoUsuario, CONVERT(VARCHAR, U.FechaIngresoUsuario, 103) FechaIngreso, CONVERT(VARCHAR, U.UltimoIngresoUsuario, 103) UltimoIngreso, U.ImagenUsuario FROM Usuarios U INNER JOIN Departamentos D ON U.Departamento = D.IdDepartamento WHERE 1 = 1 AND (D.NombreDepartamento LIKE '%\'P'%' ESCAPE '\' OR D.NombreDepartamento LIKE '%_'P'%' ESCAPE '_') AND (U.NickUsuario LIKE '%\'r'%' ESCAPE '\' OR U.NickUsuario LIKE '%_'r'%' ESCAPE '_') AND (U.NombresUsuario U.PrimerApellidoUsuario U.SegundoApellidoUsuario LIKE '%\'r'%' ESCAPE '\' 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.