SQL - Select all lorsque la valeur du filtre est vide
J'ai une requête SQL dans mon ASP.net web app qui ressemble à ceci:
SELECT * FROM [Records] WHERE ([title] LIKE '%' + @title + '%')
@titre, bien sûr, est la valeur d'une zone de texte sur la page.
Ma question est, pourquoi, lorsque la zone de texte est vide, est-ce le retour de rien? Et comment puis-je la faire revenir le tout, comme la logique me dit qu'il devrait?
placer un point d'arrêt et de vérifier l'état de la requête qui est envoyée à la base de données...
OriginalL'auteur ian93 | 2010-03-16
Vous devez vous connecter pour publier un commentaire.
RTRIM(LTRIM(@Title))
- il n'y a pas de fonction TRIM() en TSQL 🙁peut-être LEN(RTRIM(LTRIM(@Titre)))? @OMG: a une "fin de l'homme"modifier".
OK, cela fonctionne quand j'ai une requête à la base de données manuellement, mais pour quelque raison il ne fonctionne pas avec le formulaire web... je suppose que c'est une question distincte.
OriginalL'auteur Mitch Wheat
Les plus sargable option, bref de l'aide de SQL dynamique, est d'utiliser une instruction if et deux requêtes:
SQL Server 2005+ SQL dynamique version devrait ressembler à:
Contrairement à
EXEC
,sp_executesql
cache le plan de requête. Vous pouvez en lire plus à ce sujet dans la Bénédiction & Malédiction de SQL Dynamique.OriginalL'auteur OMG Ponies
Est-il possible de la valeur de @titre est de tenir la valeur null ou un espace unique?
OriginalL'auteur Doug Porter
Je ne suis pas tout à fait sûr, mais peut-être ce qui arrive quand
@title
estNULL
. Opérations surNULL
généralement de retourNULL
, alors vous pourriez être en le comparant àNULL
.OriginalL'auteur John Saunders
Utilisation
Ou de faire vérifier par un vide de titre dans le code du client, de passer la valeur NULL si oui, et en faire une condition: "@titre est nul ou...".
OriginalL'auteur Seva Alekseyev
NULL, plus rien n'est NULLE ainsi, alors que vous pourriez vous attendre à obtenir '%%' vous êtes réellement obtenir la valeur NULL. Puisque rien n'est COMME NULL (NULL à la place), vous n'obtenez rien. Vous pouvez essayer quelque chose comme [TITRE] COMME ISNULL('%' + @titre + '%', '%');
Si le premier argument de la fonction ISNULL est NULL, il retourne la deuxième arg.
OriginalL'auteur Andrew