Question

J'utilise une expression régulière dans mes instructions SQL pour une application qui ressemblent à ceci

  

SELECT * FROM table WHERE id = {{REPLACEME}}

Cependant, parfois je ne donne pas un paramètre pour remplacer cette chaîne avec. Est-il possible de le remplacer par quelque chose qui correspond à rien. J'ai essayé *, mais cela ne fonctionne pas.

Était-ce utile?

La solution

Remplacer {{}} REPLACEME avec

[someValidValueForYouIdType] OR 1=1

Autres conseils

  1. SELECT * FROM table WHERE id = id correspondra toutes les lignes qui ont id non nul
  2. SELECT * FROM table WHERE id = id OR id IS NULL correspondra toutes les lignes.

id est probablement une clé primaire, donc vous pouvez probablement utiliser l'ancienne.

Je ne peux décrire ma solution avec un exemple. Le @AllRec est un paramètre:

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

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

Dans cette solution, si @AllRec est 1 alors tout est retourné, en ignorant le filtre id. Si @AllRec est égal à zéro, le filtre est appliqué id et vous obtenez une ligne. Vous devriez être en mesure d'adapter rapidement cette solution à votre regex actuelle.

En utilisant l'option Remplacer regex vous ouvre à attaques par injection SQL.

En supposant que votre langue a le support des requêtes paramétrées, essayez cette version modifiée de la réponse de Jacob:

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

Le hic est que vous aurez toujours de fournir la valeur @id.

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

Je ne sais pas quelle langue votre utilisation et ce code de genre me fait peur, mais ...


var statement = "SELECT * FROM table";

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


Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top