Pregunta

Yo uso una expresión regular en mis sentencias SQL para una aplicación que se ven así

  

SELECT * FROM tabla WHERE id = {{replaceme}}

Sin embargo, a veces no estoy dando un parámetro para sustituir a la cadena con. ¿Hay una manera de reemplazarlo con algo que coincide con nada. Probé *, pero que no funciona.

¿Fue útil?

Solución

Reemplazar {{}} replaceme con

[someValidValueForYouIdType] OR 1=1

Otros consejos

  1. SELECT * FROM table WHERE id = id coincidirá con todas las filas que tienen id no nulo
  2. SELECT * FROM table WHERE id = id OR id IS NULL coincidirá con todas las filas.

id es probablemente una clave principal, por lo que probablemente puede utilizar la primera.

Sólo puedo describir mi solución con un ejemplo. El @AllRec es un parámetro:

Declare @AllRec bit
set @AllRec = {0|1}  --as appropriate

SELECT * 
FROM table 
WHERE 
   (
       id = {{REPLACEME}}
       and @AllRec = 0
   ) OR (
       @AllRec = 1
   )

En esta solución, si @AllRec es 1 entonces todo se devuelve, ignorando el filtro id. Si @AllRec es cero, entonces el filtro id se aplica y se obtiene una fila. Usted debe ser capaz de adaptarse rápidamente a esta expresión regular su solución actual.

El uso de la expresión regular-Sustituir opción que se abre a los ataques de inyección SQL.

Asumiendo que su lenguaje tiene soporte para consultas con parámetros, prueba esta versión modificada de la respuesta de Jacob:

SELECT * FROM table WHERE (id = @id OR @id IS NULL)

El problema es que siempre tendrá que proporcionar el valor @id.

SELECT field1, field2
FROM dbo.yourTable
WHERE id = isnull(@var, id)

No está seguro de qué idioma de su uso y el código tipo de me asusta, pero ...


var statement = "SELECT * FROM table";

If REPLACEME is not empty Then
   statement += " WHERE id = {{REPLACEME}}"
End If


Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top