Je dois écrire une requête qui obtient un ensemble d'informations à partir d'une table, mais s'il n'y a pas d'informations pour ce client spécifique, alors utilisez l'ensemble par défaut. Je me demandais s'il y avait un moyen d'éviter la duplication de requêtes dans une instruction if (exists()).SQL if (exists()) duplication de requête
Par exemple:
IF(EXISTS(SELECT * FROM UserTable WHERE Name = @UserName))
BEGIN
SELECT * FROM UserTable WHERE Name = @UserName))
END
ELSE
BEGIN
SELECT * FROM UserTable WHERE Name = 'Jon Skeet'))
END
Les deux premiers (existe et choisit la véritable partie du cas) sont exactement les mêmes. Je veux éviter d'exécuter deux fois la même requête si l'instruction est vraie. Je sais que l'existant s'arrête une fois que la première condition vraie est remplie mais c'est toujours O (n) pire cas.
Une autre option que je connais, est de mettre les informations dans une table temporaire et vérifier si l'information est là, sinon renvoyer les informations par défaut.
Les deux façons de fonctionner, mais quelle est la meilleure façon de le faire? Existe-t-il d'autres moyens de le faire? Y at-il un moyen de faire cela dans la clause WHERE puisque c'est la seule chose qui est différente?
Édition: Correction d'un exemple pour renvoyer une ligne et non un seul élément. Donc, les réponses de dumping du select à une seule variable seraient égales à une table temporaire, je suppose. En outre, de ne pas la colère Jon Skeet, orthographié son nom droit
C'est beaucoup d'options! – JerSchneid
J'aime la condition de recherche pour le nom ;-) – sl3dg3