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 :

insertion valuer null impossible


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Par défaut insertion valuer null impossible
    Bonjour,
    lorsque je met une table à jour à l'aide d'un update, j'ai un message comme quoi l'insertion d'une valeur null dans le champ d'une autre table est impossible.
    Je conclue donc qu'une table est lié à celle que je souhaite mettre a jour et que ce champ ne peut être null
    J'ai pensé à un trigger .Qu'en pensez vous?
    Je ne sais pas comment fonctionne trop les triggers
    J'aimerai que lors de l'insertion de la valeur NULL ce champ soit renseigné à l'aide du trigger par une valeur
    Avez vous une piste et le trigger est il une bonne piste?
    MERCI!

    erreur:
    Impossible d'insérer la valeur NULL dans la colonne 'C_UTIL_RESP', table 'COPIEIWSPROD020609.suiteisilog.ACTIONS'. Cette colonne n'accepte pas les valeurs NULL. Échec de INSERT.(Microsoft OLE DB Provider for SQL Server) ->
    update suiteisilog.OBJET set OBJET.C_STOBJ= 'SP' where (suiteisilog.OBJET.C_SITE = '1541' or suiteisilog.OBJET.C_SITE = '1543')

  2. #2
    Membre éclairé
    Homme Profil pro
    SQL Server
    Inscrit en
    Juin 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : SQL Server
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 43
    Par défaut
    Moi j'aurais plus dit qu'il y a une contrainte de référence une foreign key.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  *
    FROM         [NomBD].sys.all_objects as o1
    INNER JOIN [NomBD].sys.all_objects as o2 on o2.object_id = o1.parent_object_id and o2.name Like '%[NomTable]%'
    WHERE     (o1.type = 'F')

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    Le message est clair : votre table a été conçu pour empêcher toute nullité de ladite colonne. Il vous sera donc impossible de quelques façon que ce soit d'y insérer le marqueur NULL (au passage NULL n'est pas une valeur, c'est justement l'absence de valeur.... en fait un marqueur comme NIL en programmation objet).

    Si vous voulez, absolument y mettre du NULL, vous devez supprimer la contrainte NOT NULL de cette colonne !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Par défaut
    merci pour vos réponses
    justement je ne veux pas mettre la valeur null.Ce n'est pas moi qui met à jour ce champ.
    l'insertion du champ A dans ma table A généré une insertion du champ B (celui qui est NULL) dans ma table B
    Du coup cela ne marche car le champ B ne peut être NULL
    Du coup je voulais faire un trigger qui dit que quand on fait un ajout dans ma table B , alors si le champ B est null, je le remplace par une valeur 'TEST'

    j'ai fait ce trigger mais ca ne marche pas...:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TRIGGER RemplaceNULL
    ON suiteisilog.ACTIONS
    AFTER INSERT
    AS
    BEGIN
     
    if UPDATE (C_UTIL_RESP)
           BEGIN
    update suiteisilog.ACTIONS set ACTIONS.C_UTIL_RESP = 'TEST' 
    where ACTIONS.C_UTIL_RESP is NULL
           END   
    END

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    sans le DDL de vos 2 tables, difficile de vous répondre.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Par défaut
    Bonjour et merci
    comment vous fournir le DDL?
    y'a t il une requête qui fait ca?
    Ou peut générer un fichier log?
    Merci d'avance et désolé pour mon niveau....

  7. #7
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 196
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    NULL n'est pas une valeur.
    Exact.

    Extrait de la doc de SQL Server 2005 :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TYPE [ schema_name. ] type_name
    { 
        FROM base_type 
        [ ( precision [ , scale ] )  ]
        [ NULL | NOT NULL ] 
      | EXTERNAL NAME assembly_name [ .class_name ] 
    } [ ; ]

    Où l'on relève :
    NULL | NOT NULL

    Specifies whether the type can hold a null value. If not specified, NULL is the default.
    Un type (ou domaine) étant par définition un ensemble de valeurs et seulement un ensemble de valeurs, µsoft a donc tout faux...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    L'implémentation de NULL dans SQL Server est en effet bancale.

    Si l'on exécute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF NULL = NULL
    	PRINT 'OK'
    ELSE
    	PRINT 'KO'
    On obtient KO, quel que soit l'opérateur arithmétique de comparaison, ce qui est donc le comportement normal

    En revanche, si l'on pose un index unique sur une colonne autorisant la non-valuation de la colonne et que l'on tente d"insérer deux fois une ligne avec celle colonne à NULL, alors on obtient l'erreur suivante :

    Msg 2627, Level 14, State 1, Line 1
    Violation of UNIQUE KEY constraint 'UQtest_NULL'. Cannot insert duplicate key in object 'dbo.test_NULL'.
    The statement has been terminated.
    Or NULL n'est pas une valeur, c'est justement l'absence de valeur

    @++

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Exact.

    Extrait de la doc de SQL Server 2005 :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TYPE [ schema_name. ] type_name
    { 
        FROM base_type 
        [ ( precision [ , scale ] )  ]
        [ NULL | NOT NULL ] 
      | EXTERNAL NAME assembly_name [ .class_name ] 
    } [ ; ]

    Où l'on relève :
    NULL | NOT NULL

    Specifies whether the type can hold a null value. If not specified, NULL is the default.
    Un type (ou domaine) étant par définition un ensemble de valeurs et seulement un ensemble de valeurs, µsoft a donc tout faux...
    ça fait longtemps que SQL Server (version Sybase) et tout ces héritiers ont le défaut de considérer "mécaniquement" que NULL est une valeur.

    Cependant, depuis la version 2008 on peut créer des index unique filtrés simulant ainsi une vraie contrainte unique "multi" nullable.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    C'est effectivement ce que j'explique dans ce billet, mais c'est dommage de devoir faire cela ...

    @++

Discussions similaires

  1. Récupération ID après INSERT retourne NULL
    Par Jean-Marc68 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 06/12/2007, 19h55
  2. [SQL] Insertion valeur NULL de php vers SQL
    Par tkwleboss dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/11/2007, 13h21
  3. insertion valeur null en tant qu'administrateur
    Par new_wave dans le forum SQL
    Réponses: 3
    Dernier message: 06/11/2007, 11h28
  4. Réponses: 5
    Dernier message: 14/03/2006, 16h12
  5. Réponses: 1
    Dernier message: 30/11/2005, 13h44

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