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

MS SQL Server Discussion :

Insertion clef etrangère vide


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Par défaut Insertion clef etrangère vide
    Bonjour,

    Je rencontre actuellement un petit problème avec l'insertion à "NULL" d'une clef étrangère.

    Ma procedure stocké

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<>
    -- Create date: <18/08/2008>
    -- Description:	<Insertion d'une nouvelle demande partie demandeur>
    -- =============================================
    ALTER PROCEDURE [dbo].[DEV_PS_Insert_DEMANDEUR]
    	-- Add the parameters for the stored procedure here
    @id_fournisseur int,
    @id_donnee int,
    @id_type_bon int,
    @id_etape int,
    @date_demandeur datetime,
    @codeR3 varchar(30),
    @nombre int,
    @nombre_pieces_urgentes int,
    @numBB varchar(20),
    @teinte varchar(20),
    @reference varchar(20),
    @delais varchar(20),
    @designation_complete varchar(20),
    @observation varchar(500),
    @tache int,
    @precision_TACHE varchar(50),
    @id_UTILISATEUR varchar(50)
     
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
        -- Insert statements for procedure here
    INSERT INTO DEV_BON_PEINTURE
    (
    id_fournisseur,
    id_donnee,
    id_type_bon,
    id_etape,
    date_demandeur,
    codeR3,
    nombre,
    nombre_pieces_urgentes,
    numBB,
    teinte,
    reference,
    delais,
    designation_complete,
    observation_demandeur,
    tache,
    precision_TACHE,
    id_DEMANDEUR
    )
    Values
    (
    @id_fournisseur,
    @id_donnee,
    @id_type_bon,
    @id_etape,
    @date_demandeur,
    @codeR3,
    @nombre,
    @nombre_pieces_urgentes,
    @numBB,
    @teinte,
    @reference,
    @delais,
    @designation_complete,
    @observation,
    @tache,
    @precision_TACHE,
    @id_UTILISATEUR
    )
     
    SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
     
    END
    Dans certains cas @id_donnee peut être vide, pas de caractère saisie.

    Lorsque j'exécute la requète en laissant à vide le champs j'obtiens l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*201, Niveau*16, État*4, Procédure*DEV_PS_Insert_DEMANDEUR, Ligne*0
    La procédure ou fonction 'DEV_PS_Insert_DEMANDEUR' attend le paramètre '@id_donnee', qui n'a pas été fourni.
    @id_donnee est de plus une cle etrangere.

    J'ai essayé de définir à NULL le champs général "valeur ou liaison par défaut" sans succès.

    J'utilise actuellement une bidouille pour contourner le problème en envoyant une valeur "N/A" lors de l'insertion d'un champs vide mais je voulais savoir si il existait une méthodologie plus approprié.

    En vous remerciant d'avance pour vos idées cordialement.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    Il suffit d'insérer le marqueur NULL dans vos clefs étrangères.

    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/ * * * * *

Discussions similaires

  1. Insert de chaine vide
    Par Tiaps dans le forum Oracle
    Réponses: 1
    Dernier message: 03/07/2006, 18h48
  2. [LDAP] Problème lors d'insertion de valeur vide
    Par navis84 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/04/2006, 14h26
  3. [FB 1.5.2] Pb requete avec clef etrangère
    Par gudul dans le forum SQL
    Réponses: 3
    Dernier message: 17/03/2006, 16h27
  4. clef etrangère
    Par nath-0-0 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 30/11/2005, 12h39
  5. conception - clef etrangère -cardinalité forte/faible
    Par sundjata dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/11/2005, 14h57

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