2010-10-26 4 views
3

PersonneRecherche flexible pour le client SQL

| p_id | n_name | l_name | adresse | ville | état | zip |

client

| p_id | reward_points | solde |

Person_PhoneNum

| ppn_id | p_id | numéro | Le problème principal est que je veux essayer de faire une procédure stockée de récupération qui peut rechercher par n'importe quels champs de personne aussi bien que le numéro de téléphone ou p_id MAIS je veux qu'il puisse manipuler des valeurs NULL des paramètres. Voici la procédure stockée ci-dessous:

CREATE PROCEDURE RetrieveCust(
@p_id AS varchar(50), 
@f_name AS varchar(50), 
@l_name AS varchar(50), 
@address AS varchar(50), 
@city AS varchar(50), 
@state AS varchar(50), 
@zip AS varchar(50), 
@number AS varchar(50)) 

AS 
BEGIN 

END 

Je comprends que je dois joindre les tables pour faire correspondre les résultats mais je ne sais pas ce que je pouvais faire pour gérer les valeurs NULL. Toute aide serait incroyable!

+0

Juste posant le résultat pour n'importe qui qui a besoin de quelque chose de concret: –

Répondre

2

Toute NULL dans un paramètre doit correspondre à une valeur dans les tableaux. Chaque fois que vous comparez un paramètre à un champ de table ou que la comparaison avec un test pour un paramètre null:

(@f_name = f_name) or (@f_name is null) 

alors ET toutes ces comparaisons ensemble pour faire votre recherche.

La comparaison avec le numéro de téléphone lorsque le numéro de téléphone est nul entraînera plus d'une ligne s'ils ont plus d'un numéro de téléphone. Sélectionnez DISTINCT sur p_id.

Qu'est-ce que le client a à faire avec la requête? Vous ne sélectionnez aucun champ dans cette table et vous ne semblez renvoyer aucune valeur de la procédure.

+0

ha bien je suppose que la table de client était inutile pour la question car je l'ai posée. Merci cependant, j'avais le sentiment que ce serait quelque chose de simple comme ça. –

+0

bonne réponse, plus descriptif et informatif que le mien, je ferais mieux de lever mon jeu! – campo

1

votre déclaration où pourrait être quelque chose comme ça

where (f_name = @f_name or @f_name is null) 
Questions connexes