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

Cita:
Iniciado por Libras Ver Mensaje
pregunta para que es el ESCAPE??? y para que usas el quotename??

prueba con esto:

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 ''%\' + @Departamento + '%'' ESCAPE ''\''
  13. OR D.NombreDepartamento LIKE ''%_' + @Departamento + '%'' ESCAPE ''_'')'
  14. END
  15. IF @Usuario IS NOT NULL AND @Usuario <> ''
  16. BEGIN
  17. SET @Sql = @Sql + ' AND (U.NickUsuario LIKE ''%\' + @Usuario + '%'' ESCAPE ''\''
  18. OR U.NickUsuario LIKE ''%_' + @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 ''%\' + @Nombre + '%'' ESCAPE ''\''
  23. OR U.NombresUsuario' + ' ' + 'U.PrimerApellidoUsuario' + ' ' + 'U.SegundoApellidoUsuario LIKE ''%_' + @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

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 original
  1. DECLARE @SQL NVARCHAR(500)
  2.     SET @SQL = 'SELECT * FROM Usuarios WHERE 1 = 1'
  3.     IF @Usuario IS NOT NULL AND @Usuario <> ''
  4.     BEGIN
  5.         SET @SQL = @SQL + ' AND NickUsuario = ' + Quotename(@Usuario,'''') + ''
  6.     END
  7.     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.

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