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 :

Impossible d'insérer la valeur NULL avec un UPDATE synchronisé


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Impossible d'insérer la valeur NULL avec un UPDATE synchronisé
    Bonjour,

    Lorsque j'exécute cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE DisputeFolder
    SET DisputeFolder.NFree2 = 
    (
    SELECT SUM(DisputeAmountInEntityCurrency) 
    FROM DisputeFolder_Item
    WHERE DisputeFolder_Item.DisputeFolderID = DisputeFolder.ID
    GROUP BY DisputeFolder_Item.DisputeFolderID
    HAVING SUM(DisputeAmountInEntityCurrency) <> DisputeFolder.NFree2
    )
    Le message d'erreur suivant apparait :

    Msg*515, Niveau*16, État*2, Ligne*1
    Impossible d'insérer la valeur NULL dans la colonne 'NFree2', table 'CAN.dbo.DisputeFolder'. Cette colonne n'accepte pas les valeurs NULL. Échec de UPDATE.
    L'instruction a été arrêtée.
    Pourtant, le SUM ne renvoie pas de valeur NULL, je ne comprends donc pas d'où vient l'erreur.
    Pouvez-vous m'éclairer ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 111
    Points : 28 466
    Points
    28 466
    Par défaut
    Sais-tu que ta requête met à jour toute la table ?
    Et qu'elle essaye de mettre à NULL les valeurs qui ne doivent pas être modifiées
    Tu as de la chance que la requête n'ait pas été au bout

    Comme cela, ce devrait être un peu moins... destructif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    UPDATE DisputeFolder
    SET DisputeFolder.NFree2 = 
        (   SELECT  SUM(DisputeAmountInEntityCurrency) 
            FROM    DisputeFolder_Item
            WHERE   DisputeFolder_Item.DisputeFolderID = DisputeFolder.ID
        )
    WHERE   EXISTS
        (   SELECT  NULL 
            FROM    DisputeFolder_Item
            WHERE   DisputeFolder_Item.DisputeFolderID = DisputeFolder.ID
            HAVING  SUM(DisputeAmountInEntityCurrency) <> DisputeFolder.NFree2
        )
    ;

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Ou comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    UPDATE T
    	SET NFree2 = somme
    FROM DisputeFolder T
    INNER JOIN (
    	SELECT DisputeFolderID, SUM(DisputeAmountInEntityCurrency) AS somme
    	FROM DisputeFolder_Item
    	GROUP BY DisputeFolderID
    ) S
    	ON S.DisputeFolderID = T.ID
    	AND S.somme <> Nfree2

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 111
    Points : 28 466
    Points
    28 466
    Par défaut
    Je n'avais en effet pas fait attention sue c'était du SQL-Server qui supporte la syntaxe a-normale UPDATE ... FROM ... JOIN...

  5. #5
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    En tout cas je viens de tester la version d'al1_24 et cela fonctionne parfaitement :-)
    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impossible d'insérer une valeur Null
    Par nabou dans le forum SSIS
    Réponses: 4
    Dernier message: 24/04/2012, 11h28
  2. [Reflection] Impossible de transmettre une valeur null avec method.invoke
    Par touftouf57 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 02/07/2010, 03h42
  3. Réponses: 5
    Dernier message: 11/07/2008, 08h37
  4. Pas d'affichage des valeurs nulles avec un COUNT
    Par phoenixz22 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 30/05/2007, 18h39
  5. [Oracle 9i] Insérer une valeur NULL
    Par gogolak dans le forum Oracle
    Réponses: 3
    Dernier message: 21/04/2006, 14h39

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