IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Adding a value to a 'datetime' column caused overflow.


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 37
    Points : 34
    Points
    34
    Par défaut Adding a value to a 'datetime' column caused overflow.
    Bonjour à tous,

    Tout d’abord désolé si un sujet semblable a déjà été posté, j’ai fais une recherche pour le message d’erreur en question et je n’ai rien trouvé qui ressemblait à mon problème.

    Voici tout d’abord le code SQL en entier qui est exécuté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    SELECT  dbo.xdGetCustomerNameByCustomerID_fct(c.CustomerID) AS CustomerName ,
            DATEADD(DAY, s.DureeTraitement, s.DateService) AS DtRenPrevue ,
            COUNT(*) AS Nombre ,
            s.DureeTraitement ,
            s.DateService
    FROM    dbo.Ordonnance o
            INNER JOIN dbo.CUSTOMERS c ON o.FKCustomerID = c.CustomerID
            INNER JOIN dbo.Services s ON s.FKOrdonnanceID = o.OrdonnanceID
            LEFT JOIN dbo.GROUPS g ON g.GroupID = c.fkGroupID
    WHERE   s.UniqueID = ( SELECT MAX(UniqueID)
                           FROM   dbo.Services
                           WHERE  FKOrdonnanceID = o.OrdonnanceID
                         )
            AND o.OrdonnanceType IN ( 1, 2 )
            AND o.OrdonnanceState NOT IN ( 1, 2, 3 )
            AND ( ( @Renouvelable = 2
                    AND ( ( ( o.EndDate = '1753-01-01' )
                            AND ( dbo.xDRxOrdonnanceRenRestantAsOfDate_fct(o.OrdonnanceID, ISNULL(s.DateService, o.DateService)) <= 0 )
                          )
                          OR ( ( o.EndDate <> '1753-01-01' )
                               AND ( o.EndDate <= @DateFin )
                             )
                        )
                  )
                  OR ( @Renouvelable = 0
                       AND ( ( ( o.EndDate <> '1753-01-01' )
                               AND ( o.EndDate > @DateFin )
                             )
                             OR ( ( o.EndDate = '1753-01-01' )
                                  AND ( dbo.xDRxOrdonnanceRenRestantAsOfDate_fct(o.OrdonnanceID, ISNULL(s.DateService, o.DateService)) > 0 )
                                )
                           )
                     )
                  OR @Renouvelable = 1
                )
            AND ( @FoyerID IS NULL
                  OR c.CustomerID IN ( SELECT ParamValues.id.value('.', 'int') AS id
                                       FROM   @FoyerID.nodes('/customers/id') AS ParamValues ( id ) )
                )
    GROUP BY c.CustomerID ,
            c.ShipLastName ,
            c.ShipFirstName ,
            c.ShipNomConjoint ,
            c.ShipNo ,
            c.ShipStreet ,
            c.ShipApp ,
            c.ShipCity ,
            c.PhoneNumber ,
            g.GroupName ,
            s.DureeTraitement ,
            s.DateService /*,
            DATEADD(DAY, s.DureeTraitement, s.DateService)*/
    HAVING  COUNT(*) >= @RxCount
    ORDER BY DATEADD(DAY, s.DureeTraitement, s.DateService) ,
            CustomerName
    Remarquez le bout en commentaires dans la clause GROUP BY :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /*,
            DATEADD(DAY, s.DureeTraitement, s.DateService)*/
    Si je roule le SQL tel qu’il se trouve ci-haut (avec la partie en commentaires dans le GROUP BY), tout se déroule bien. Si je remets le DATEADD dans le GROUP BY, j’obtiens le message d’erreur suivant :

    « Adding a value to a 'datetime' column caused overflow. »

    Remarquez que le DATEADD se retrouve aussi dans le SELECT et dans le ORDER BY. Dans ces clauses ça fonctionne super bien, mais pas dans le GROUP BY.

    s.DureeTraitement est un champ INT, s.dateService est un champ DATETIME (c'est n'est pas un FLOAT ou un VARCHAR qui devrait être converti par exemple).

    Je n’arrive pas à trouver pourquoi. Il s’agit du même bout de SQL, dans les clauses SELECT et ORDER BY tout est opérationnel, mais pas dans le GROUP BY. Y a-t-il une raison spécifique qui pourrait expliquer ce scénario?

    Merci d’avance de l’aide que vous pourrez m’apporter à ce sujet.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Dans le code qui fonctionne, commente la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HAVING  COUNT(*) >= @RxCount
    et excécute.

    Il est probable qu'à ta grande suprise : ça plante.
    Tu pourras alors te rendre compte que tu as bel et bien un overflow qui apparait pour certainnes combinaisons DATEADD(DAY, s.DureeTraitement, s.DateService).
    Most Valued Pas mvp

Discussions similaires

  1. Unable to convert MySQL date/time value to System.DateTime
    Par mvc_dev dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 16/08/2012, 17h05
  2. Réponses: 2
    Dernier message: 18/04/2012, 16h34
  3. Réponses: 0
    Dernier message: 20/05/2011, 16h18
  4. ORA-01401 : inserted value too large for column
    Par Mattgic dans le forum Oracle
    Réponses: 5
    Dernier message: 25/05/2010, 10h18
  5. Adding a value to a 'datetime' column caused overflow.
    Par cmako dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/07/2009, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo