2012-09-14 4 views
2

J'ai créé un SP pour retourner des données client pour une entreprise. Je passe l'identification de compagnie et l'identification de client dedans au SP. Il y a deux types d'identifiants de client dans la table que j'interroge. Les deux types sont enregistrés dans des colonnes différentes.sql où contre deux colonnes

Pour un exemple, disons que j'ai les colonnes suivantes dans ma table.

ID, Commentaires, CustomerTypeAId, CustomerTypeBId

soit des ID client peut être nul dans une rangée. L'identifiant client que je passe au SP peut être un client de type A ou un client de type B. Donc, dans ma clause WHERE, je dois spécifier si CustomerTypeAId est null, puis interroger CustomerTypeBId.

@CusId int=0 
SELECT * FROM TEST 
WHERE (How to put this part?) 

Répondre

1

Vous pouvez utiliser OR dans votre clause where car il peut s'agir de l'une des deux colonnes.

SELECT * 
FROM TEST 
WHERE CustomerTypeAId = @id OR 
     CustomerTypeBId = @id 
0
WHERE @CusId IN (CustomerTypeAId, CustomerTypeBId); 

Cependant, pourquoi le stockage de ces valeurs dans des colonnes distinctes? Allez-vous ajouter une autre colonne lorsque vous introduisez Type C? Au lieu de cela, vous devriez juste avoir une colonne type et une colonne CustomerID. De cette façon, lorsque vous ne vous souciez pas du type, vous correspondez simplement à la colonne CustomerID.

1

Je pense que ce qui suit fait ce que vous voulez:

select * 
from test 
where CustomerTypeAid = @CustId or CustomerTypeBid = @CustId 

NULL est souvent un problème dans les états booléens; Cependant, cela fonctionne très bien avec OR.

0

On dirait que vous avez besoin quelque chose comme:

SELECT * 
FROM TEST 
WHERE CustomerTypeAId = @id 
     OR (CustomerTypeAId IS NULL AND CustomerTypeBId = @id) 
Questions connexes