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 :

Erreur lors d'insertion dans une table avec Indentity


Sujet :

MS SQL Server

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut Erreur lors d'insertion dans une table avec Indentity
    Bonjour,

    Mon problème concerne l'insertion dans des tables avec des Identity, qui marchaient très bien jusqu'alors.

    J'ai actuellement une erreur quand j'insère une ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO MyTable 
    VALUES(idville, nom, prenom, date)
    * Sans mettre l'id personne qui est généré automatiquement.

    L'erreur est (je mets l'erreur que j'ai constaté SQL Server car celle que me renvoie Visual Studio est un peu bidon) :

    Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to off
    Sachant que j'ai bien mis Identity à 'Oui'.

    Pour mieux comprendre mon erreur, j'ai testé dans SQL Server 2005 ma requête avec les mêmes valeurs que mes paramètres et ma requête devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO Mytable (Id_Personne, Nom, Prenom, Date) 
    Values (idville, nom, prenom, date)
    Ce qui explique l'erreur, mais je n'arrive pas à comprendre pour quelle raison !

    Alors si quelqu'un peut m'éclairer je lui en serai reconnaissant.

    D'avance merci.
    Cordialement.

    PS : J'utilise SQL Sever dans un projet ASP.NET (C#).
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  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
    21 768
    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 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    Donnez nous le DDL de votre table (script SQL). Sans cela difficile de vous aider.

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

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    USE [SUIVICONTRATS-AO-01]
    GO
    /****** Objet*:  Table [dbo].[Mytable]    Date de génération du script*: 03/20/2008 09:52:17 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[MISSION](
    	[ID_Mytable] [int] IDENTITY(1,1) NOT NULL,
    	[ID_FOU] [int] NOT NULL,
    	[ID_DEM] [int] NOT NULL,
    	[ID_PRO] [int] NOT NULL,
    	[NUMEROSA] [varchar](10) COLLATE Latin1_General_CI_AS NULL,
    	[NOM_INTER] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
    	[PRENOM_INTER] [varchar](20) COLLATE Latin1_General_CI_AS NULL,
    	[DATE_ASSIG] [datetime] NULL,
    	[DATE_DEB] [datetime] NULL,
    	[DATE_FIN] [datetime] NULL,
    	[CODE_DEP] [varchar](4) COLLATE Latin1_General_CI_AS NULL,
    	[LIBELLE_DEP] [varchar](40) COLLATE Latin1_General_CI_AS NULL,
    	[DATE_DEP] [datetime] NULL,
     CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED 
    (
    	[ID_MyTable] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF, FILLFACTOR = 70) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    SET ANSI_PADDING OFF
    GO
    ALTER TABLE [dbo].[MyTable]  WITH CHECK ADD  CONSTRAINT [FK_MyTable_DEM_GLO] FOREIGN KEY([ID_DEM])
    REFERENCES [dbo].[DEM_GLO] ([ID_DEM])
    GO
    ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_DEM_GLO]
    GO
    ALTER TABLE [dbo].[MyTable]  WITH CHECK ADD  CONSTRAINT [FK_MyTable_FOUR] FOREIGN KEY([ID_FOUR])
    REFERENCES [dbo].[FOUR] ([ID_FOUR])
    GO
    ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MISSION_FOUR]
    GO
    ALTER TABLE [dbo].[MyTable]  WITH CHECK ADD  CONSTRAINT [FK_MISSION_PRO_TY] FOREIGN KEY([ID_PRO])
    REFERENCES [dbo].[PROFIL_TYPE] ([ID_PRO_TY])
    GO
    ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_PRO_TY]
    Voici le script de ma table.

    Merci pour votre réponse.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  4. #4
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    le fait de faire
    INSERT INTO MyTable
    VALUES(idville, nom, prenom, date)
    stipule a SQL serveur que tu n'as que ces 4 champs dans ta table
    alors que
    INSERT INTO Mytable (Id_Personne, Nom, Prenom, Date)
    VALUES (idville, nom, prenom, date)
    stipule a SQL serveur que tu insère un enregistrement avec seulement 4 champs dont la valeur est fixée par ta requête

    un bon programmeur n'écrit jamais le 1° cas car tu ne sais pas si demain quelqu'un ne va pas rajouter un champ dans la table?
    donc il te faut écrire
    si l'id personne qui est généré automatiquement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO Mytable (Id_Ville, Nom, Prenom, Date) 
    VALUES (idville, nom, prenom, date)
    et la fonction identity viendra mettre, à l'insertion, la bonne valeur dans le champ id_personne

    pour ton DDL cela pourrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO MISSION
    (ID_FOU,NOM_INTER,PRENOM_INTER,DATE_ASSIG)
    VALUES
    (4,'Sonnom','John',getdate())
    sql serveur positionnera lui-même ID_Mytable
    Errare humanum est, perseverare diabolicum (Sénèque)

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par serge0934 Voir le message
    le fait de faire

    stipule a SQL serveur que tu n'as que ces 4 champs dans ta table
    alors que
    Salut,
    merci pour ta réponse.

    Je sais qu'en mettant les colonnes ça marche. Je l'ai testé.

    Mais ce qui me pose problème, c'est que j'ai plusieurs table et ne pas spécifier les colonnes ne m'a jamais posé de problème jusqu'alors. Donc pour ta premiére affirmation, j'ai des contre exemple, surtout que quand l'ID est Identity, SQL Server génére une erreur car on ne peut pas insérer explicitement l'ID. C'est ce qui m'intrigue ...

    Si quelqu'un a une idée,
    D'avance merci.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Euh question svp,

    DATETIME au niveau .NET et au niveau SQL Server ne sont pas complétement compatible ? En fait l'erreur pourrait venir du fait que default(DateTime) est 01/01/0001 et en SQL Server elle est comprise 1/1/1753 et 12/31/9999 ... Je fais continuer à creuser.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

Discussions similaires

  1. Insertion dans une table avec IBDataSet
    Par mehdiing dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/12/2009, 11h16
  2. Réponses: 6
    Dernier message: 14/05/2009, 11h01
  3. Réponses: 2
    Dernier message: 09/06/2008, 21h51
  4. Réponses: 3
    Dernier message: 24/04/2006, 21h03
  5. Réponses: 3
    Dernier message: 10/02/2006, 15h48

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