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 :

[debutant]Auto incrementation sur sql-server 2000


Sujet :

MS SQL Server

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut [debutant]Auto incrementation sur sql-server 2000
    Bonjour, je suis débutant dans la pratique de sql-server. D'habitude j'utilise mysql.

    Mon problème est le suivant :

    J'aimerais inserer des données en auto incrementation comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into commercial values ('','xxx','xxx','') ;
    insert into commercial values ('','yyy','yyyy','') ;
    mais il me mets comme erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Serveur : Msg 2627, Niveau 14, État 1, Ligne 1
    Violation de la contrainte PRIMARY KEY 'pk_commercial'. Impossible d'insérer une clé en double dans l'objet 'commercial'.
    L'instruction a été arrêtée.
    Merci de m'aiguiller. Merci
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Pourriez-vous nous donner le schéma de votre table ?

  3. #3
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 74
    Points
    74
    Par défaut
    Regarde du coté du champ identity

    A+
    Chris

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Votre premier champ est vraisemblablement la clé primaire. Ce champ ne peut être 2 fois similaire, comme dans vos exemples d'insertions.

    Un sp_helpconstraint commercial devrait vous donner l'information nécessaire à votre compréhension
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  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 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    regardez sur mon site SQLpro.developpez.com, il y a un article sur l'auto incrémentation des clefs des tables avec les différentes techniques.
    Le principe pour SQL Server est qu'il ne faut pas spécifier la colonne ni dans la liste des colonnes visées par l'insertion, ni dans la liste des valeurs passées.

    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
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    bonjour,

    quand je veux insérer je ne spécifie pas la premiere colonne qui est l'id en fait de la table...

    J'ai généré un script sql à partir de manager :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE [dbo].[utilisateur] (
    	[uti_id] [int] NOT NULL ,
    	[uti_nom] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
    	[uti_prenom] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
    	[uti_login] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
    	[uti_passwd] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
    	[uti_droits] [varchar] (50) COLLATE French_CI_AS NOT NULL 
    )
    j'ai 6 champs à ma table et je fais cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into utilisateur values ('Laurent','Sylvain','a','a','admin')
    mais j'ai comme erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Serveur : Msg 213, Niveau 16, État 4, Ligne 1
    Erreur INSERT : le nom ou le numéro de colonne des valeurs fournies ne correspondent pas à la définition de la table.
    ps : j'ai essayé d'aller sur votre site que je connais dailleurs mais le serveur doit être hs...

    Merci en tout cas pour votre patience.
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  7. #7
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Vous DEVEZ

    - spécifier votre colonne première comme autoincrémentale (identity) si vous ne voulez pas la renseigner
    - spécifier les colonnes impactées si vous ne spécifiez pas toutes les colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     insert into utilisateur (uti_nom, uti_prenom, uti_login, uti_passwd, uti_droits) values ('Laurent','Sylvain','a','a','admin')
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  8. #8
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    Super en fait la syntaxe est la suivante pour la création de table avec un champ auto incrémenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE [dbo].[utilisateur] (
    	[uti_id] [int] IDENTITY (1, 1) NOT NULL ,
    	[uti_nom] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
    	[uti_prenom] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
    	[uti_login] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
    	[uti_pass] [varchar] (50) COLLATE French_CI_AS NOT NULL ,
    	[uti_droits] [varchar] (50) COLLATE French_CI_AS NOT NULL 
    ) ON [PRIMARY]
    Merci de votr aide...
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  9. #9
    Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Je me permets de rebondir sur ce sujet pour avoir votre avis.

    Comment peut-on récupérer l'ID qui vient d'être crée à la suite d'une instruction INSERT tel que décrit ci-dessus ?

    Merci.

    ps : Le fait d'être au sein d'une transaction a-t-il une influence ?

  10. #10
    Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Je viens de me rappeller qu'il suffit de faire un SELECT @@IDENTITY.

    Merci à tous.

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

Discussions similaires

  1. Problème champ auto-incrément sur SQL Server 2000
    Par samirmember dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/03/2010, 13h17
  2. Quelques questions sur SQL Server 2000
    Par yinyang dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/12/2005, 19h39
  3. renseignements sur SQL Server 2000
    Par nagty dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/06/2005, 20h59
  4. auto incrementation en SQL server
    Par jefferson dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/12/2004, 11h10
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

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