Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2011, 11h20   #1
Invité régulier
 
Inscription : novembre 2004
Messages : 50
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 50
Points : 7
Points : 7
Par défaut SP et datetime

bonjour a tous,

j'ai remarqué avec une procédure stocké qu'elle ne renvoyait pas le même résultat selon que je formatte ma variable en datetime ou en nvarchar.

voici ma procédure stockée:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
exec sp_executesql N'
SELECT  DISTINCT
                         CASE WHEN VOITURE.nom = '' OR VOITURE.nom IS NULL THEN RTRIM(VOITURE.nom) ELSE RTRIM(VOITURE.nom) END + ' ' + RTRIM(VOITURE.marque) AS identite_VOITURE, 
                         (DATEDIFF(MONTH,CONVERT(DATETIME, VOITURE.datefabrication, 103), GETDATE()) - CASE WHEN DAY(CONVERT(DATETIME, datefabrication, 103)) = DAY(GETDATE())  THEN 1 ELSE 0 END) / 12 AS age_VOITURE, 
                         VOITURE.carrosserie AS carrosserie_VOITURE, PARAM_SERVICE.Libelle AS service_VOITURE, 
                         PARAM_SERVICE.Code AS codeservice_VOITURE, EMPLACEMENT.noEMPLACEMENT AS EMPLACEMENT_VOITURE, EMPLACEMENT.typeEMPLACEMENT AS typeEMPLACEMENT_VOITURE, 
                         RTRIM(MECANICIEN.nom) + ' ' + RTRIM(MECANICIEN.marque) AS MECANICIEN_VOITURE, RESERVATION.motif AS REPARATION_VOITURE, 
                         RESERVATION.dateadmission AS dateentree_VOITURE,REPARATION.heuredebut AS dateREPARATION_VOITURE, RESERVATION.datesortie AS datesortie_VOITURE, 
                         CADRAN.idCADRAN AS CADRAN_VOITURE, PARAMSPECIALITE.nomspecialite, 
                         CASE WHEN RESERVATION.modeentree LIKE '%Hospitalisation%' THEN 'Hospi' ELSE CASE WHEN RESERVATION.modeentree LIKE '%Ambulatoire%' THEN 'Ambu' ELSE
                         CASE WHEN RESERVATION.modeentree LIKE '%urgence%' then 'Urg' else CASE WHEN RESERVATION.modeentree LIKE '%externe%' then 'Ext' end END END END AS mode
FROM            CADRAN INNER JOIN
                         MECANICIEN ON CADRAN.idnchir = MECANICIEN.idnational INNER JOIN
                         RESERVATION ON CADRAN.idCADRAN = RESERVATION.idCADRAN INNER JOIN
                         PARAMSPECIALITE ON RESERVATION.idspecialite = PARAMSPECIALITE.idspecialite left outer  JOIN
                         REPARATION ON RESERVATION.idreservation = REPARATION.idreservation INNER JOIN
                         VOITURE ON CADRAN.ipp = VOITURE.IPP LEFT OUTER JOIN
                         PLANNING ON RESERVATION.idreservation = PLANNING.idreservation INNER JOIN
                         EMPLACEMENT ON PLANNING.idEMPLACEMENT = EMPLACEMENT.idEMPLACEMENT INNER JOIN
                         PARAM_SERVICE ON EMPLACEMENT.idservice = PARAM_SERVICE.IdService
WHERE        (CADRAN.dateentree <= '23/03/2011 08:00') AND (CADRAN.datesortie >= '23/03/2011 08:00') AND (PLANNING.dateheuredebut <= '23/03/2011 08:00') AND 
                         (PLANNING.dateheurefin >= '23/03/2011 08:00') AND (RESERVATION.idreservation NOT IN
                             (SELECT        RESERVATION_1.idreservation
                               FROM            RESERVATION AS RESERVATION_1 INNER JOIN
                                                         RESERVATION_STATUT ON RESERVATION_1.idreservation = RESERVATION_STATUT.idreservation INNER JOIN
                                                         STATUT ON RESERVATION_STATUT.idstatut = STATUT.idstatut
                               WHERE        (STATUT.codestatut = 'annulee') AND (STATUT.typestatut = 'us')))
AND   EXISTS
  (SELECT MAX(dateREPARATION)
   FROM REPARATION AS t
   WHERE t.idreservation = RESERVATION.idreservation)
ORDER BY identite_VOITURE',N'@parameter1 datetime',@parameter1='23/03/2011 08:00'
et donc si je remplace par :
Code :
]@parameter1 nvarchar(50)
cela me donne des résultats différents, a savoir que j'ai 106 ligne avec datetime et 153 avec le nvarchar.

moi y'en a pas compris T_T.
ighost est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 13h35   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Bonjour

ceci n'a aucun sens:
Citation:
AND EXISTS
(SELECT MAX(dateREPARATION)
FROM REPARATION AS t
WHERE t.idreservation = RESERVATION.idreservation)
Autant faire un SELECT * ou remplacer le EXISTS par un INNER JOIN...


Que voulez vous filtrer exactement ?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 14h27   #3
Invité régulier
 
Inscription : novembre 2004
Messages : 50
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 50
Points : 7
Points : 7
Je ne remet pas en cause que la requete est loin d'être optimisé .

Néanmoins j'ai trouvé la réponse à mon problème, le champs "CADRAN.dateentree" est en date alors que la comparaison se fait avec du datetime, d'après ce que j'ai compris, SQL rajoute les heures/minutes/secondes au date pour faire la comparaison, donc le seul moment ou la comparaison donnera le même résultat c'est à minuit. ^^

sujet résolu donc .
ighost est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h48.


 
 
 
 
Partenaires

Hébergement Web