Sentencia de SQL Partido Cualquier cosa
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.
Solución
Reemplazar {{}} replaceme con
[someValidValueForYouIdType] OR 1=1
Otros consejos
-
SELECT * FROM table WHERE id = id
coincidirá con todas las filas que tienenid
no nulo -
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