Requete SQL
Résolu/Fermé
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
-
13 août 2009 à 14:01
soleil_levant Messages postés 393 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 14 avril 2011 - 13 août 2009 à 16:23
soleil_levant Messages postés 393 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 14 avril 2011 - 13 août 2009 à 16:23
A voir également:
- Requete SQL
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
- Il y a eu un problème avec cette requête. nous travaillons à sa résolution aussi vite que nous le pouvons. - Forum Facebook
- Logiciel sql - Télécharger - Bases de données
- Sql server recovery - Télécharger - Gestion de données
- Requête sql doublons sur 2 champs ✓ - Forum Programmation
4 réponses
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 389
13 août 2009 à 15:09
13 août 2009 à 15:09
Bonjour soleil_levant,
Peux-tu copier/coller le code de ta procédure stp? Cela devrait me permettre d'essayer de t'aider.
A plus
Peux-tu copier/coller le code de ta procédure stp? Cela devrait me permettre d'essayer de t'aider.
A plus
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
13 août 2009 à 15:30
13 août 2009 à 15:30
Bonjour Christounet,
Merci pour ta réponse :)
Voici mon code avec les commentaires inclut :
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
--ICI c'est Alter, ne pas oublier de créer la proc si elle existe pas
ALTER PROCEDURE [dbo].[zzzz_selection_client]
(@Prenom_Client varchar(100), @Nom_Client varchar(100))
WITH
EXECUTE AS CALLER
AS
SELECT SendPayIndicator As [Code TYPE], S_SEN_FIRSTNAME As [Prénom du Client], S_SEN_LASTNAME As [Nom du Client], S_SEN_BIRTHDATE As [Date de Naissance Client], S_SEN_ADDRESS As [Adresse du Client], S_SEN_CITY As [Ville du Client], S_SEN_ZIP As [Code Postal], S_REC_FIRSTNAME As [Prénom Client Autre], S_REC_LASTNAME As [Nom Client Autre]
FROM qryTransactionDetails
WHERE qryTransactionDetails.SendPayIndicator = 'S'
AND qryTransactionDetails.S_SEN_LASTNAME = @Nom_Client /* Ici je veux que ça soit un contient la valeur du paramètre */
AND qryTransactionDetails.S_SEN_FIRSTNAME = @Prenom_Client /*contain la valeur du parametre*/
AND qryTransactionDetails.S_SEN_BIRTHDATE = @Date_Naissance
UNION ALL
SELECT SendPayIndicator, P_REC_FIRSTNAME, P_REC_LASTNAME, P_REC_BIRTHDATE, P_REC_ADDRESS, P_REC_CITY, P_REC_ZIP, P_SEN_FIRSTNAME, P_SEN_LASTNAME
FROM qryTransactionDetails
WHERE qryTransactionDetails.SendPayIndicator = 'P'
AND qryTransactionDetails.P_REC_LASTNAME = @Nom_Client /* contain aussi*/
AND qryTransactionDetails.P_REC_FIRSTNAME = @Prenom_Client /*contain aussi*/
AND qryTransactionDetails.P_REC_BIRTHDATE = @Date_Naissance
Tu remarquera niveau date de naissance, une égalité absolut. Il se peu que je ne possède pas la date de naissance, je peux mettre un bloc avec des AND et un autre OR, mais ça risque de ralentir la requete :(
ex WHERE ((nom and prenom and date)OR(nom and prenom)) <== risque de reparcourir les lignes
Merci d'avance Chrsitounet
Merci pour ta réponse :)
Voici mon code avec les commentaires inclut :
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
--ICI c'est Alter, ne pas oublier de créer la proc si elle existe pas
ALTER PROCEDURE [dbo].[zzzz_selection_client]
(@Prenom_Client varchar(100), @Nom_Client varchar(100))
WITH
EXECUTE AS CALLER
AS
SELECT SendPayIndicator As [Code TYPE], S_SEN_FIRSTNAME As [Prénom du Client], S_SEN_LASTNAME As [Nom du Client], S_SEN_BIRTHDATE As [Date de Naissance Client], S_SEN_ADDRESS As [Adresse du Client], S_SEN_CITY As [Ville du Client], S_SEN_ZIP As [Code Postal], S_REC_FIRSTNAME As [Prénom Client Autre], S_REC_LASTNAME As [Nom Client Autre]
FROM qryTransactionDetails
WHERE qryTransactionDetails.SendPayIndicator = 'S'
AND qryTransactionDetails.S_SEN_LASTNAME = @Nom_Client /* Ici je veux que ça soit un contient la valeur du paramètre */
AND qryTransactionDetails.S_SEN_FIRSTNAME = @Prenom_Client /*contain la valeur du parametre*/
AND qryTransactionDetails.S_SEN_BIRTHDATE = @Date_Naissance
UNION ALL
SELECT SendPayIndicator, P_REC_FIRSTNAME, P_REC_LASTNAME, P_REC_BIRTHDATE, P_REC_ADDRESS, P_REC_CITY, P_REC_ZIP, P_SEN_FIRSTNAME, P_SEN_LASTNAME
FROM qryTransactionDetails
WHERE qryTransactionDetails.SendPayIndicator = 'P'
AND qryTransactionDetails.P_REC_LASTNAME = @Nom_Client /* contain aussi*/
AND qryTransactionDetails.P_REC_FIRSTNAME = @Prenom_Client /*contain aussi*/
AND qryTransactionDetails.P_REC_BIRTHDATE = @Date_Naissance
Tu remarquera niveau date de naissance, une égalité absolut. Il se peu que je ne possède pas la date de naissance, je peux mettre un bloc avec des AND et un autre OR, mais ça risque de ralentir la requete :(
ex WHERE ((nom and prenom and date)OR(nom and prenom)) <== risque de reparcourir les lignes
Merci d'avance Chrsitounet
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 389
13 août 2009 à 16:04
13 août 2009 à 16:04
Bonjour soleil_levant,
Tu peux rajouter dans ta procédure des tests sur les paramètres, le code donnant ceci
Alors je suis parti du principe que tu auras toujours Nom_Client connu, et j'ai envisagé les quatre cas suivants:
1°) Prenom_Client connu (<> '*') et Date_Naissance connue (<> 0)
2°) Prenom_Client non-connu (= '*') et Date_Naissance connue (<> 0)
3°) Prenom_Client connu (<> '*') et Date_Naissance non-connue (= 0)
4°) Prenom_Client non-connu (= '*') et Date_Naissance non-connue (=0)
et j'ai donc quatre select différents en fonction de ces cas.
Si tu ne connais pas le prénom, passe comme paramètre *, si tu ne connais pas la date de naissance passe comme paramètre 0.
J'ai pas testé le code, à toi de voir.
A plus
Tu peux rajouter dans ta procédure des tests sur les paramètres, le code donnant ceci
IF @Prenom_Client <> '*' AND @Date_Naissance <> 0 BEGIN SELECT SendPayIndicator As [Code TYPE], S_SEN_FIRSTNAME As [Prénom du Client], S_SEN_LASTNAME As [Nom du Client], S_SEN_BIRTHDATE As [Date de Naissance Client], S_SEN_ADDRESS As [Adresse du Client], S_SEN_CITY As [Ville du Client], S_SEN_ZIP As [Code Postal], S_REC_FIRSTNAME As [Prénom Client Autre], S_REC_LASTNAME As [Nom Client Autre] FROM qryTransactionDetails WHERE qryTransactionDetails.SendPayIndicator = 'S' AND qryTransactionDetails.S_SEN_LASTNAME = @Nom_Client /* Ici je veux que ça soit un contient la valeur du paramètre */ AND qryTransactionDetails.S_SEN_FIRSTNAME = @Prenom_Client /*contain la valeur du parametre*/ AND qryTransactionDetails.S_SEN_BIRTHDATE = @Date_Naissance UNION ALL SELECT SendPayIndicator, P_REC_FIRSTNAME, P_REC_LASTNAME, P_REC_BIRTHDATE, P_REC_ADDRESS, P_REC_CITY, P_REC_ZIP, P_SEN_FIRSTNAME, P_SEN_LASTNAME FROM qryTransactionDetails WHERE qryTransactionDetails.SendPayIndicator = 'P' AND qryTransactionDetails.P_REC_LASTNAME = @Nom_Client /* contain aussi*/ AND qryTransactionDetails.P_REC_FIRSTNAME = @Prenom_Client /*contain aussi*/ AND qryTransactionDetails.P_REC_BIRTHDATE = @Date_Naissance end else IF @Prenom_Client = '*' AND @Date_Naissance <> 0 BEGIN SELECT SendPayIndicator As [Code TYPE], S_SEN_FIRSTNAME As [Prénom du Client], S_SEN_LASTNAME As [Nom du Client], S_SEN_BIRTHDATE As [Date de Naissance Client], S_SEN_ADDRESS As [Adresse du Client], S_SEN_CITY As [Ville du Client], S_SEN_ZIP As [Code Postal], S_REC_FIRSTNAME As [Prénom Client Autre], S_REC_LASTNAME As [Nom Client Autre] FROM qryTransactionDetails WHERE qryTransactionDetails.SendPayIndicator = 'S' AND qryTransactionDetails.S_SEN_LASTNAME = @Nom_Client /* Ici je veux que ça soit un contient la valeur du paramètre */ AND qryTransactionDetails.S_SEN_BIRTHDATE = @Date_Naissance UNION ALL SELECT SendPayIndicator, P_REC_FIRSTNAME, P_REC_LASTNAME, P_REC_BIRTHDATE, P_REC_ADDRESS, P_REC_CITY, P_REC_ZIP, P_SEN_FIRSTNAME, P_SEN_LASTNAME FROM qryTransactionDetails WHERE qryTransactionDetails.SendPayIndicator = 'P' AND qryTransactionDetails.P_REC_LASTNAME = @Nom_Client /* contain aussi*/ AND qryTransactionDetails.P_REC_BIRTHDATE = @Date_Naissance end else IF @Prenom_client <> '*' AND @Date_Naissance = 0 begin SELECT SendPayIndicator As [Code TYPE], S_SEN_FIRSTNAME As [Prénom du Client], S_SEN_LASTNAME As [Nom du Client], S_SEN_BIRTHDATE As [Date de Naissance Client], S_SEN_ADDRESS As [Adresse du Client], S_SEN_CITY As [Ville du Client], S_SEN_ZIP As [Code Postal], S_REC_FIRSTNAME As [Prénom Client Autre], S_REC_LASTNAME As [Nom Client Autre] FROM qryTransactionDetails WHERE qryTransactionDetails.SendPayIndicator = 'S' AND qryTransactionDetails.S_SEN_LASTNAME = @Nom_Client /* Ici je veux que ça soit un contient la valeur du paramètre */ AND qryTransactionDetails.S_SEN_FIRSTNAME = @Prenom_Client /*contain la valeur du parametre*/ UNION ALL SELECT SendPayIndicator, P_REC_FIRSTNAME, P_REC_LASTNAME, P_REC_BIRTHDATE, P_REC_ADDRESS, P_REC_CITY, P_REC_ZIP, P_SEN_FIRSTNAME, P_SEN_LASTNAME FROM qryTransactionDetails WHERE qryTransactionDetails.SendPayIndicator = 'P' AND qryTransactionDetails.P_REC_LASTNAME = @Nom_Client /* contain aussi*/ AND qryTransactionDetails.P_REC_FIRSTNAME = @Prenom_Client /*contain aussi*/ end else SELECT SendPayIndicator As [Code TYPE], S_SEN_FIRSTNAME As [Prénom du Client], S_SEN_LASTNAME As [Nom du Client], S_SEN_BIRTHDATE As [Date de Naissance Client], S_SEN_ADDRESS As [Adresse du Client], S_SEN_CITY As [Ville du Client], S_SEN_ZIP As [Code Postal], S_REC_FIRSTNAME As [Prénom Client Autre], S_REC_LASTNAME As [Nom Client Autre] FROM qryTransactionDetails WHERE qryTransactionDetails.SendPayIndicator = 'S' AND qryTransactionDetails.S_SEN_LASTNAME = @Nom_Client /* Ici je veux que ça soit un contient la valeur du paramètre */ UNION ALL SELECT SendPayIndicator, P_REC_FIRSTNAME, P_REC_LASTNAME, P_REC_BIRTHDATE, P_REC_ADDRESS, P_REC_CITY, P_REC_ZIP, P_SEN_FIRSTNAME, P_SEN_LASTNAME FROM qryTransactionDetails WHERE qryTransactionDetails.SendPayIndicator = 'P' AND qryTransactionDetails.P_REC_LASTNAME = @Nom_Client /* contain aussi*/ end
Alors je suis parti du principe que tu auras toujours Nom_Client connu, et j'ai envisagé les quatre cas suivants:
1°) Prenom_Client connu (<> '*') et Date_Naissance connue (<> 0)
2°) Prenom_Client non-connu (= '*') et Date_Naissance connue (<> 0)
3°) Prenom_Client connu (<> '*') et Date_Naissance non-connue (= 0)
4°) Prenom_Client non-connu (= '*') et Date_Naissance non-connue (=0)
et j'ai donc quatre select différents en fonction de ces cas.
Si tu ne connais pas le prénom, passe comme paramètre *, si tu ne connais pas la date de naissance passe comme paramètre 0.
J'ai pas testé le code, à toi de voir.
A plus
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
13 août 2009 à 16:23
13 août 2009 à 16:23
Merci pour ta réponse Christounet,
C'est super comme solution, les tables de ma bases ne sont pas toutes indexées ou plutot mal indexées. Comme tu m'as déja conseillé sur autre post d'indexer selon mon besoin, ta solution risque de mettre d'avantages de contraintes sur le temps d'execution de ma proc. La date de naissance est finalement obligatoire me dit-on, alors je préserver cette structure de ma proc en ajoutant le LIKE '%'+..+'%'
Merci encore une fois,
Sujet Résolut grâce à l'unique Christounet :D
C'est super comme solution, les tables de ma bases ne sont pas toutes indexées ou plutot mal indexées. Comme tu m'as déja conseillé sur autre post d'indexer selon mon besoin, ta solution risque de mettre d'avantages de contraintes sur le temps d'execution de ma proc. La date de naissance est finalement obligatoire me dit-on, alors je préserver cette structure de ma proc en ajoutant le LIKE '%'+..+'%'
Merci encore une fois,
Sujet Résolut grâce à l'unique Christounet :D
13 août 2009 à 15:51
J'ai trouvé pour le contain :
@Nom_Client LIKE '%'+prametr+'%'
@Prenom_Client LIKE '%'+parametre+'%'
Mais pr la date pas encore ;)
Merci