Requete SQL
Résolu
soleil_levant
Messages postés
393
Date d'inscription
Statut
Membre
Dernière intervention
-
soleil_levant Messages postés 393 Date d'inscription Statut Membre Dernière intervention -
soleil_levant Messages postés 393 Date d'inscription Statut Membre Dernière intervention -
Bonjour
Je souhaite utiliser ma procédure stockée SQL Server qui renvoie un résultat requete. les paramètres sont @nom, @prenom et @datenaissance. ils sont tous obligatoires (closes AND)
je souhaite renseigner dans un cas le nom, la date de naissance et pas le prénom, qu'elle paramètre dois-je mettre?
J'ai essayé EXEC 'Nom de ma proc' @Nom = 'DUPONT', @Prenom = '*', @Date = '09021984'
le résultat est vide.
Quelqu'un a une idée??
Merci beaucoup.
Je souhaite utiliser ma procédure stockée SQL Server qui renvoie un résultat requete. les paramètres sont @nom, @prenom et @datenaissance. ils sont tous obligatoires (closes AND)
je souhaite renseigner dans un cas le nom, la date de naissance et pas le prénom, qu'elle paramètre dois-je mettre?
J'ai essayé EXEC 'Nom de ma proc' @Nom = 'DUPONT', @Prenom = '*', @Date = '09021984'
le résultat est vide.
Quelqu'un a une idée??
Merci beaucoup.
A voir également:
- Requete SQL
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
4 réponses
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
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
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
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
J'ai trouvé pour le contain :
@Nom_Client LIKE '%'+prametr+'%'
@Prenom_Client LIKE '%'+parametre+'%'
Mais pr la date pas encore ;)
Merci