Cita:
Iniciado por Libras pregunta para que es el ESCAPE??? y para que usas el quotename??
prueba con esto:
Código SQL:
Ver originalALTER 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 ''%\' + @Departamento + '%'' ESCAPE ''\''
OR D.NombreDepartamento LIKE ''%_' + @Departamento + '%'' ESCAPE ''_'')'
END
IF @Usuario IS NOT NULL AND @Usuario <> ''
BEGIN
SET @Sql = @Sql + ' AND (U.NickUsuario LIKE ''%\' + @Usuario + '%'' ESCAPE ''\''
OR U.NickUsuario LIKE ''%_' + @Usuario + '%'' ESCAPE ''_'')'
END
IF @Nombre IS NOT NULL AND @Nombre <> ''
BEGIN
SET @Sql = @Sql + ' AND (U.NombresUsuario' + ' ' + 'U.PrimerApellidoUsuario' + ' ' + 'U.SegundoApellidoUsuario LIKE ''%\' + @Nombre + '%'' ESCAPE ''\''
OR U.NombresUsuario' + ' ' + 'U.PrimerApellidoUsuario' + ' ' + 'U.SegundoApellidoUsuario LIKE ''%_' + @Nombre + '%'' ESCAPE ''_'')'
END
SET @Sql = @Sql + ' ORDER BY U.NickUsuario ASC'
BEGIN TRAN
PRINT @Sql
--EXEC(@Sql)
COMMIT TRAN
END
Estimado, muchas gracias, funcionó perfecto. Efectivamente el problema estaba en Quotename el cual lo estaba utilizando para generación de comillas en una consulta anterior:
Código SQL:
Ver originalDECLARE @SQL NVARCHAR(500)
SET @SQL = 'SELECT * FROM Usuarios WHERE 1 = 1'
IF @Usuario IS NOT NULL AND @Usuario <> ''
BEGIN
SET @SQL = @SQL + ' AND NickUsuario = ' + Quotename(@Usuario,'''') + ''
END
EXEC(@SQL)
al no colocar Quotename, si ejecuto EXEC Search 'pp', '' la consulta me devuelve SELECT * FROM Usuarios WHERE 1 = 1 AND NickUsuario = [pp]
El escape lo utilizo por motivos de seguridad
http://mteheran.wordpress.com/2010/0...on-sql-server/ en ese link se explica el por qué.
Muchas gracias nuevamente Libras.