2011-02-23 4 views
0

J'ai une requête que je dois exécuter et qui nécessite que j'obtienne des lignes d'une table en fonction de la valeur d'un champ dans une autre table (que j'ai déjà obtenue).Combinaison de requêtes SQL Server

Je l'ai déjà fait comme ceci (simplifié).

cmd.commandtext = "SELECT * FROM TableB WHERE FieldC = '" & TableA.FieldF & "'" 
cmdReader = cmd.executereader() 
If cmdReader.HasRows Then 
    Do something 
Else 
    cmdReader.close() 
    cmd.commandtext = "SELECT * FROM TableB WHERE FieldC = 'Generic'" 
    cmdReader = cmd.executereader() 
    If cmdReader.HasRows Then 
     Do something 
    Else 
     Do something 
    End If 
End If 

Est-il possible que je puisse combiner ces deux requêtes pour que je sois l'un ou l'autre? Faites-moi savoir si vous avez besoin de plus d'informations, je ne suis pas sûr d'avoir bien expliqué cela.

+1

Vous devez lire les attaques de type Injection SQL (http://en.wikipedia.org/wiki/SQL_injection). – Oded

+0

Voulez-vous uniquement renvoyer des valeurs FieldC "génériques" lorsqu'aucune valeur ne correspond à FieldF? –

+0

Oui c'est ce que je cherche. Ce que j'ai ci-dessus le fait mais je me demandais simplement s'il était possible de le faire dans le SQL plutôt que dans VB.NET – Nalum

Répondre

2

Essayer:

WHERE FieldC = '" & TableA.FieldF & "' OR FieldC = 'Generic' 

Ou

WHERE FieldC IN ('" & TableA.FieldF & "', 'Generic') 

Mieux encore, les paramètres d'utilisation:

WHERE FieldC IN (@FieldF, 'Generic') 
... 
cmd.Parameters.Add("@FieldF", TableA.FieldF); 

EDIT: Pour sélectionner un seul ensemble de lignes dans une requête, vous pouvez:

SELECT * 
FROM TableB 
WHERE FieldC = @FieldF 
UNION ALL 
SELECT * 
FROM TableB 
WHERE NOT EXISTS (SELECT * FROM TableB WHERE FieldC = @FieldF) 
     AND FieldC = 'Generic' 
+1

** définitivement toujours ** utiliser les paramètres ... –

+0

Cela ne retournera-t-il pas toutes les lignes à la fois ' TableA.FieldF' et 'Generic' valeurs? Je veux retourner l'un ou l'autre. – Nalum

+0

@Nalum: Ok, c'est un peu difficile en SQL. Une façon est une «union», ajoutée à la réponse. – Andomar