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 :

probleme remplissage table


Sujet :

MS SQL Server

  1. #1
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut probleme remplissage table
    j'ai une table routeur (num_serie_r,nom,date_acquisition,adresse_ip)et une table
    equipement (num_serie,code_marque,id_cellule).
    je veux que sql server me permet d'ecrire le méme num serie qui se touve a la table equipement dans la table routeur. càd la duplication de la clé primaire .
    comment je peut la faire??
    voici le code avec sql server:
    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
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Equipement]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[Equipement](
    	[num_serie] [int] NOT NULL,
    	[code_marque] [int] NOT NULL,
    	[id_cellule] [int] NOT NULL,
     CONSTRAINT [PK_Equipement] PRIMARY KEY CLUSTERED 
    (
    	[num_serie] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
     
     
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[routeur]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[routeur](
    	[num_serie_r] [int] NOT NULL,
    	[nom] [text] NOT NULL,
    	[date_acquisition] [datetime] NOT NULL,
    	[adresse_ip] [text] NOT NULL,
    	[id_port] [varchar](50) NOT NULL,
     CONSTRAINT [PK_routeur] PRIMARY KEY CLUSTERED 
    (
    	[num_serie_r] ASC
    )WITH (IGNORE_DUP_KEY = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    END
    GO
    j'ai changer l'option IGNORE_DUP_KEY = ON mais elle ne marche pas.
    svp aider moi

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Vous faites fausse route à mon avis ici.

    Vous êtes dans un cas d'héritage ici. Un équipement peut être décliné en sous type routeur ici.

    Je ferai une table equipement et une table routeur de la façon suivante :

    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
    CREATE TABLE [dbo].[Equipement](
     [id] INT IDENTITY(1,1) PRIMARY KEY,
     [num_serie] [int] NOT NULL,
     [code_marque] [int] NOT NULL,
     [nom] [text] NOT NULL,
     [date_acquisition] [datetime] NOT NULL,
     [id_cellule] [int] NOT NULL
    );
     
    CREATE TABLE [dbo].[routeur](
     [id] [int] PRIMARY KEY,
      [adresse_ip] [text] NOT NULL,
     [id_port] [varchar](50) NOT NULL,
     CONSTRAINT [FK_routeur] FOREIGN KEY (id) REFERENCES Equipement(id)
    );
    ... et j'ajouterai un index unique sur la colonne num_serie de la table Equipement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE UNIQUE INDEX IDX_U_Equipement_numserie
    ON dbo.Equipement
    (
     num_serie
    );
    Avez vous d'autres tables autre que Routeur ?

    ++

  3. #3
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    oui , jai table switch et table serveur
    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
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[serveur]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[serveur](
    	[num_serie] [int] NOT NULL,
    	[nom] [text] NOT NULL,
    	[date_acquisition] [datetime] NOT NULL,
    	[adresse_ip] [text] NOT NULL,
    	[disque_dur] [text] NOT NULL,
    	[mémoire] [text] NOT NULL,
    	[processeur] [text] NOT NULL,
     CONSTRAINT [PK_serveur] PRIMARY KEY CLUSTERED 
    (
    	[num_serie] ASC
    )WITH (IGNORE_DUP_KEY = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    END
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[switch]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[switch](
    	[num_serie] [int] NOT NULL,
    	[nom] [text] NOT NULL,
    	[date_acquisition] [datetime] NOT NULL,
    	[adresse_ip] [text] NOT NULL,
     CONSTRAINT [PK_switch] PRIMARY KEY CLUSTERED 
    (
    	[num_serie] ASC
    )WITH (IGNORE_DUP_KEY = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    END
    GO
    merci

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Ok donc le but est de vraiment avoir une entité générale qui réunit les attributs communs à tous vos équipements et de spécialiser cette dernière en créeant des entités pour vos équipements en routeur, switch, serveurs etc ... pour lesquelles vous aurez une suite d'attributs qui leurs sont spécifiques.

    Quelque chose du genre (A paufiner) :

    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
    CREATE TABLE [dbo].[Equipement](
        [id] INT IDENTITY(1,1) PRIMARY KEY,
    	[num_serie] [int] NOT NULL,
    	[code_marque] [int] NOT NULL,
    	[adresse_ip] VARCHAR(15) NOT NULL,
    	[id_cellule] [int] NOT NULL
    );
     
    CREATE UNIQUE INDEX IDX_U_Equipement_numserie
    ON dbo.Equipement
    (
     num_serie
    )
     
    CREATE TABLE [dbo].[routeur](
    	[id] [int] PRIMARY KEY,
    	[nom] [text] NOT NULL,
    	[date_acquisition] [datetime] NOT NULL,
    	[id_port] [varchar](50) NOT NULL,
        CONSTRAINT [FK_routeur] FOREIGN KEY (id) REFERENCES Equipement(id)
    );
     
    CREATE TABLE [dbo].[serveur](
    	id INT PRIMARY KEY,
    	[disque_dur] [text] NOT NULL,
    	[mémoire] [text] NOT NULL,
    	[processeur] [text] NOT NULL,
        CONSTRAINT [FK_serveur] FOREIGN KEY (id) REFERENCES Equipement(id)
    );
     
    CREATE TABLE [dbo].[switch](
    	id INT PRIMARY KEY,
    	Qos BIT,
    	JumboFrame BIT
        CONSTRAINT [FK_switch] FOREIGN KEY (id) REFERENCES Equipement(id)
    );
    De plus comme vous êtes dans un cas d'héritage avec exclusion mutuelle (un serveur ne peut pas être un routeur, un swith ne peut pas être un serveur etc ...) il faudra implémenter des contraintes d'exclusion sous forme de trigger.

    Je vous conseille l'article de SQLPro à ce sujet.

    ++

  5. #5
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    merci pour votre réponse.
    j'ai fait la base de donnée comme tu me la dit mais le probléme est encore trouvable , quand je veut modifier un routeur , je recois ce message d'erreur avec vb6 "cannot insert duplicate key row in object'dbo.equipement' with unique index 'IDX_U_Equipement_numserie'"
    comment faire ?? SVP

  6. #6
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Qu'appellez vous modification dans votre cas ?

    Une modification implique une commande UPDATE sur la table ...

    Que faites vous exactement ?

    ++

  7. #7
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    par exemple , j'ai changé le nom de routeur en utilisation l'interface modifier équipement

    je m’excuse parce que je met un code vb :

    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
     requete = "select * from Equipement "
     Rs2.Open requete, cnn, adOpenKeyset, adLockOptimistic
     Rs2.AddNew
     Rs2.Fields("num_serie") = série.Text
     Rs2.Fields("code_marque") = code_m1
     Rs2.Fields("id_cellule") = id_cel1
     Rs2.Update
     Rs2.Close
     
    requete = "select * from routeur  "
     Rs4.Open requete, cnn, adOpenKeyset, adLockOptimistic
     Rs4.AddNew
     Rs4.Fields("nom") = nom.Text
     Rs4.Fields("date_acquisition") = DTPicker1.Value
     Rs4.Fields("adresse_ip") = adresse.Text
     Rs4.Fields("id_port") = id_p1
     Rs4.Update
     Rs4.Close
    en plus le champ id comment il doit être remplie dans la table routeur?

  8. #8
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    en plus le champ id comment il doit être remplie dans la table routeur?
    Vous devez récupérer l'id créé lors de l'insertion de vos données dans la table equipement et inserer cet id dans la table routeur avec les informations associées.

    phase 1 --> insert dans table equipement
    phase 2 --> recuperation de l'id dans table equipement
    phase 3 --> insert dans la table routeur avec id = id dans table equipement

    ++

  9. #9
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    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
    requete = "select * from Equipement "
     Rs2.Open requete, cnn, adOpenKeyset, adLockOptimistic
     Rs2.AddNew
     Rs2.Fields("num_serie") = série.Text
     Rs2.Fields("code_marque") = code_m1
     Rs2.Fields("id_cellule") = id_cel1
     Rs2.Update
     Rs2.Close
     
     requete = "select * from equipement,routeur where equipement.id = routeur.id"
     Rs2.Open requete, cnn, adOpenKeyset, adLockOptimistic
     If Rs2.RecordCount > 0 Then
        Rs2.AbsolutePosition = 1
        i = Rs2.Fields("id")
     Rs2.Close
     End If
     
     requete = "select * from routeur "
     Rs4.Open requete, cnn, adOpenKeyset, adLockOptimistic
     Rs4.AddNew
     Rs4.Fields("id") = i
     Rs4.Fields("nom") = nom.Text
     Rs4.Fields("date_acquisition") = DTPicker1.Value
     Rs4.Fields("adresse_ip") = adresse.Text
     Rs4.Fields("id_port") = id_p1
     Rs4.Update
     Rs4.Close
    est ce que c'est juste ?!!

  10. #10
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    je m’excuse de mettre le code vb.
    j'ai besoin de votre aide au niveau de la création de la base de donnée, j'ai suivi vos conseils et j'ai crée de nouveau la base.
    j'ai besoin de votre aide au niveau de trigger.
    voici mon essai :

    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    /*  Trigger TRG_DEL_equipement pour contrôler la suppression dans la table "equipement"  */
    CREATE TRIGGER TRG_DEL_equipement
           ON equipement
           FOR DELETE
    AS
    BEGIN
       DECLARE
          @errno    INTEGER,
          @errmsg   VARCHAR(255)
     
     
        /*  Suppression interdit s'il existe un fils dans une des tables filles  */
       IF EXISTS (SELECT *
                  FROM   (SELECT id
                          FROM routeur
                          UNION ALL
                          SELECT id
                          FROM serveur
                          UNION ALL
                          SELECT id
                          FROM switch) T
                  WHERE id IN (SELECT id
                                   FROM   INSERTED))
        BEGIN
           SET @errno  = 30006
           SET @errmsg = 'Ce equipement est encore référencé dans une des tables filles. Suppression impossible.'
           GOTO LBL_ERROR
        END
     
        RETURN
     
    /*  Gestion d'erreurs  */
    LBL_ERROR:
        RAISERROR @errno @errmsg
        ROLLBACK TRANSACTION
    END
    GO
     
     
    /*  Trigger sur routeur pour contrôler l'insertion  */
     
    CREATE TRIGGER TRG_routeur 
                   ON routeur 
                   FOR INSERT, UPDATE
    AS
    BEGIN
       DECLARE
           @errno    INTEGER,
          @errmsg   VARCHAR(255)
     
    /*  La clef de "equipement" doit exister pour la création de "routeur"  */
       IF NOT EXISTS(SELECT *
                     FROM   equipement T
                            INNER JOIN INSERTED I
                                  ON T.id = I.id)
       BEGIN
          SET @errno  = 30002
          SET @errmsg = 'Clef de "equipement" inconnu. Insertion dans "routeur" impossible.'
          GOTO LBL_ERROR
       END
     
    /* l'identifiant de routeur ne doit pas être utilisé par les autres tables filles */
       IF EXISTS (SELECT *
                  FROM   (SELECT id
                          FROM serveur
                          UNION ALL
                          SELECT id
                          FROM switch) T
                  WHERE id IN (SELECT id
                                   FROM   INSERTED))
       BEGIN
          SET @errno  = 30002
          SET @errmsg = 'Clef de "equipement" déjà utilisée par ailleur. Insertion dans "routeur" impossible.'
          GOTO LBL_ERROR
       END
     
       RETURN 
     
    END
     
    /*  Trigger sur serveur pour contrôler l'insertion  */
    CREATE TRIGGER TRG_serveur
           ON serveur
           FOR INSERT, UPDATE
    AS
    BEGIN
       DECLARE
          /* @errno    INTEGER, */
          /* @errmsg   VARCHAR(255) */
     
    /*  La clef de "equipement" doit exister pour la création de "serveur"  */
       IF NOT EXISTS(SELECT *
                     FROM   equipement T
                            INNER JOIN INSERTED I
                                  ON T.id = I.id)
       BEGIN
          /* SET @errno  = 30002*/
          SET @errmsg = 'Clef de "equipement" inconnu. Insertion dans "serveur" impossible.'
          GOTO LBL_ERROR
       END
     
    /* l'identifiant de serveur ne doit pas être utilisé par les autres tables filles */
       IF EXISTS (SELECT *
                  FROM   (SELECT id
                          FROM routeur
                          UNION ALL
                          SELECT id
                          FROM switch) T
                  WHERE id IN (SELECT id
                                   FROM   INSERTED))
       BEGIN
         /* SET @errno  = 30002*/
          SET @errmsg = 'Clef de "equipement" déjà utilisée par ailleur. Insertion dans "serveur" impossible.'
          GOTO LBL_ERROR
       END
     
       RETURN
     
    /*END*/
     
    /*  Trigger sur switch pour contrôler l'insertion  */
    CREATE TRIGGER TRG_switch
           ON switch
           FOR INSERT, UPDATE
    AS
    BEGIN
       DECLARE
         /* @errno    INTEGER, */
         /* @errmsg   VARCHAR(255) */
     
    /*  La clef de "equipement" doit exister pour la création de "switch"  */
       IF NOT EXISTS(SELECT *
                     FROM   equipement T
                            INNER JOIN INSERTED I
                                  ON T.id = I.id)
       BEGIN
          /* SET @errno  = 30002 */
          SET @errmsg = 'Clef de "equipement" inconnu. Insertion dans "switch" impossible.'
          GOTO LBL_ERROR
       END
     
    /* l'identifiant de serveur ne doit pas être utilisé par les autres tables filles */
       IF EXISTS (SELECT *
                  FROM   (SELECT id
                          FROM routeur
                          UNION ALL
                          SELECT id
                          FROM serveur) T
                  WHERE id IN (SELECT id
                                   FROM   INSERTED))
       BEGIN
          /* SET @errno  = 30002 */
          SET @errmsg = 'Clef de "equipement" déjà utilisée par ailleur. Insertion dans "switch" impossible.'
          GOTO LBL_ERROR
       END
     
       RETURN
     
    /*  Gestion d'erreurs  */
    LBL_ERROR:
        RAISERROR @errno @errmsg
        ROLLBACK TRANSACTION
    END
     
     
    CREATE TABLE [dbo].[Equipement](
     [id] INT IDENTITY(1,1) PRIMARY KEY,
     [num_serie] [int] NOT NULL,
     [code_marque] [int] NOT NULL,
     [id_cellule] [int] NOT NULL,
    CONSTRAINT [FK_Equipement_cellule] FOREIGN KEY(id_cellule) REFERENCES cellule (id_cellule),
    CONSTRAINT [FK_Equipement_marques] FOREIGN KEY(code_marque) REFERENCES marques (code_marque)
    );
     
    CREATE UNIQUE INDEX IDX_U_Equipement_numserie
    ON dbo.Equipement
    (
     num_serie
    );
     
    CREATE TABLE [dbo].[routeur](
     [id] [int] PRIMARY KEY,
     [nom][varchar](50) not null,
     [date_acquisition][datetime] not null,
     [adresse_ip] [text] NOT NULL,
     [id_port] [varchar](50) NOT NULL,
     CONSTRAINT [FK_routeur] FOREIGN KEY (id) REFERENCES Equipement(id),
     CONSTRAINT [FK_routeur_port] FOREIGN KEY(id_port) REFERENCES port (id_port)
    );
     
    CREATE TABLE [dbo].[serveur](
     [id] [int] PRIMARY KEY,
     [nom][varchar](50) not null,
     [date_acquisition][datetime] not null,
     [adresse_ip] [text] NOT NULL,
     [disque_dur] [varchar](50) NOT NULL,
     [mémoire] [varchar](50) NOT NULL,
     [processeur] [varchar](50) NOT NULL,
     CONSTRAINT [FK_serveur] FOREIGN KEY (id) REFERENCES Equipement(id)
    );
     
    CREATE TABLE [dbo].[switch](
     [id] [int] PRIMARY KEY,
     [nom][varchar](50) not null,
     [date_acquisition][datetime] not null,
     [adresse_ip] [text] NOT NULL,
     CONSTRAINT [FK_switch] FOREIGN KEY (id) REFERENCES Equipement(id)
    );
     
    CREATE TABLE [dbo].[port](
     [id_port] [int] PRIMARY KEY,
     [type_port][varchar](50) not null
    );
     
    CREATE TABLE [dbo].[marques](
     [code_marque] [int] PRIMARY KEY,
     [nom_marque][varchar](50) not null
    );
     
    CREATE TABLE [dbo].[cellule](
     [id_cellule] [int] PRIMARY KEY,
     [nom_cellule][varchar](50) not null,
     [tel][varchar] (50) not null,
     [fax] [varchar](50) NOT NULL,
     [ville] [varchar](50) NOT NULL,
     [nom_responsable] [varchar] (50) not null
    );
     
    CREATE TABLE [dbo].[utilisateur](
     [cin] [varchar] (50) PRIMARY KEY,
     [nom][varchar](50) not null,
     [prenom][varchar] (50) not null,
     [login] [varchar] (50) NOT NULL,
     [password] [varchar](50) NOT NULL,
     [mail][varchar] (50) not null,
     [id_profil] [int] NOT NULL,
    CONSTRAINT [FK_utilisateur_profils] FOREIGN KEY(id_profil) REFERENCES profils (id_profil)
    );
     
    CREATE TABLE [dbo].[profils](
     [id_profil] [int] PRIMARY KEY,
     [profil] [varchar](50) not null
    );
     
    CREATE TABLE [dbo].[alerte](
     [reference_alerte] [int] PRIMARY KEY,
     [date_panne][datetime] not null,
     [heure_panne][datetime] not null,
     [num_serie] [int] not null,
     [type_equi] [text] not null,
    CONSTRAINT [FK_alerte_Equipement] FOREIGN KEY(num_serie) REFERENCES Equipement (num_serie)
    );
     
    CREATE TABLE [dbo].[decision](
     [reference_alerte_d] [int] PRIMARY KEY,
     [cin][varchar] (50) not null,
     [date_decision][datetime] not null,
     [heure_decision] [datetime] not null,
     [description_decision] [text] not null,
     [type_equi] [text] not null,
     [traite] [text] not null,
    CONSTRAINT [FK_decision_alerte] FOREIGN KEY(reference_alerte_d) REFERENCES alerte (reference_alerte),
    CONSTRAINT [FK_decision_utilisateur] FOREIGN KEY(cin) REFERENCES utilisateur (cin)
    );
     
    end
    merci mikedavem de m'aider

  11. #11
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    comment je peux corriger le probléme :
    cannot insert duplicate key row in object dbo.equipement with unique index ' IDX_U_Equipement_numserie' ???

  12. #12
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Citation Envoyé par chaima01 Voir le message
    comment je peux corriger le probléme :
    cannot insert duplicate key row in object dbo.equipement with unique index ' IDX_U_Equipement_numserie' ???
    Si vous avez ce message c'est que vous essayez d'insérer un numéro de série identique pour votre équipement. Etes vous sûr de mettre à jour votre équipement ?

    Pour en être certain vous pouvez tester votre code VB en désactivant la contrainte unique IDX_U_Equipement_numserie.

    ++

  13. #13
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    le problème maintenant est devenu au niveau de la table routeur.
    "violation of primary key constraint 'pk_routeur_0AD2A005' cannot insert duplicate key in object 'dbo.routeur'"

    je veux réaliser la modification a un routeur. le num_serie reste lui même et le changement peut etre realiser sur les autre champs (nom,adresse ip...)

    SVP aider moi , c'est trés urgent !!!

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par chaima01 Voir le message
    SVP aider moi , c'est trés urgent !!!
    Si c'est une urgence, contactez le support Microsoft. Ici, c'est un forum d'entraide bénévole et nous avons aussi nos priorités. Merci bien d'en prendre compte.
    Deuxièmement, lisez les messages d'erreur!!!
    cannot insert duplicate key in object 'dbo.routeur'
    Vous n'essaieriez pas d'entré un nouvel enregistrement avec une clef primaire déjà employée ??

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    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 009
    Billets dans le blog
    6
    Par défaut
    Déjà son modèle n'est pas bon :
    1) utilisation de noms illicite, par exemple colonnes avec accents ! (mémoire)
    2) utilisations de types obsolètes : text
    3) utilisations de types inappropriés : addresse_ip en text, num-serie en INT !!!!
    4) non respect des formes normales (une adresse IP n'est pas atomique...)
    ....

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

  16. #16
    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
    Par défaut
    Bonjour

    (une adresse IP n'est pas atomique...)
    Je conviens que le type text est mal choisi pour stocker une adresse IP, mais en quoi considérer qu'une adresse IP est atomique serait une erreur ?

Discussions similaires

  1. [MaxDB - SAP] probleme de tables ...
    Par Fredd_b dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 12/08/2008, 07h54
  2. Remplissage table avec les jours d'un mois
    Par tomtom25 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/05/2005, 15h32
  3. Probleme alter table
    Par F.F. dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/02/2005, 16h57
  4. [firebird 1.5] Probleme sur tables de grande taille
    Par iguanevif dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2004, 14h33
  5. Probleme 'ALTER TABLE' et 'FOREIGN KEY'
    Par maahta dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/09/2003, 15h25

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