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 :

IDENTITY OPTION - SQL SERVER


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 3
    Points
    3
    Par défaut IDENTITY OPTION - SQL SERVER
    Bonjour,

    Surement que le sujet existe déjà mais je me perds un peu sur le forum. Donc j'ai tout bonnement crée une nouvelle discussion.
    J'aimerais savoir s'il y a une possibilité de rajouter l'option identity à une colonne d'une table (définie à la base comme unique ) sans bien entendu utiliser une table temporaire pour stocker les données et recréer ma table en faisant un identity_insert.
    ce serait vraiment génial pour quio pourrait me répondre.
    En passant bon appétit à tous ceux qui sont en pause.

    Cdt.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    La réponse est Non. L'instruction T-SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE Produit ALTER COLUMN IdProduit INT NOT NULL IDENTITY(1,1) ; 
    GO
    ne permet pas de rajouter ni de supprimer la propriété IDENTITY à une colonne déjà existante. Vous obtiendrez systématiquement l'erreur ci-dessous :
    Msg 156, Niveau 15, État 1, Ligne 1
    Syntaxe incorrecte vers le mot clé 'identity'.

    Soit la table Produit ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE Produit( 
      IdProduit  INT NOT NULL, 
      Libelle    VARCHAR(60) NULL 
    )
    ON [PRIMARY]
    GO
    Pour ajouter la propriété IDENTITY à colonne déjà existante IdProduit procédez comme suit :
    1 - Supprimez, le cas échéant, tous les objets liés à la colonne IdProduit : Clés étrangères (Foreign Keys) , clé primaire (Primary Key), Indexes etc..
    2 - Déroulez sur la base de données concernée le script ci-dessous :
    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
    BEGIN TRANSACTION
    GO
    -- 2-1 - Créez une  table temporaire ayant exactement la même structure que la table Produit 
    CREATE TABLE dbo.Tmp_Produit
    	(
    	IdProduit INT NOT NULL IDENTITY (1, 1), 
           Libelle   VARCHAR(60) NULL 
    	)  
    ON [PRIMARY]
    GO
    -- 2-2 - Autorisez l'insertion dans l'unique colonne (IdProduit) de la table
    --       Tmp_Produit, ayant la propriété IDENTITY
    SET IDENTITY_INSERT dbo.Tmp_Produit ON
    GO
    -- 2-3 - Copiez les données de la table Produits vers la table temporaire Tmp_Produit
    IF EXISTS(SELECT * FROM dbo.Produit)
    	 EXEC('INSERT INTO dbo.Tmp_Produit (IdProduit, Libelle)
    		SELECT IdProduit, Libelle FROM dbo.Produit WITH (HOLDLOCK TABLOCKX)')
    GO
    -- 2-4 – Interdisez l'insertion dans l'unique colonnne (IdProduit) de la table
    --      Tmp_Produit, ayant la propriété IDENTITY
    SET IDENTITY_INSERT dbo.Tmp_Produit OFF
    GO
    -- 2-5 - Supprimez, après avoir copié les données dans la table temporaire, 
    --         la table originale Produit 
    DROP TABLE dbo.Produit
    GO
    --  2-6 - Renommez la table temporaire 'Tmp_Produit' en 'Produit'. 
    EXECUTE sp_rename N'dbo.Tmp_Produit', N'Produit', 'OBJECT' 
    GO
    -- 
    COMMIT 
    GO
    3 - Recréez le cas échéant, tous les objets liés à la colonne IdProduit*: Clés étrangères (Foreign Keys) , clé primaire (Primary Key), Indexes etc.., supprimés à l'étape 1

    A+

Discussions similaires

  1. BulkInsert et Identity dans SQL Server 2000 et SP4
    Par AJemni dans le forum Développement
    Réponses: 6
    Dernier message: 21/01/2010, 10h19
  2. Réponses: 4
    Dernier message: 12/08/2008, 12h20
  3. [SQL Server 2005 Std] Pb de Réplication (IDENTITY)
    Par Peck777 dans le forum Réplications
    Réponses: 2
    Dernier message: 29/06/2006, 10h32
  4. [SQL Server] Modifier un ID de type Identity
    Par BoOom dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/04/2006, 09h37
  5. [Sql Server/MSDE][Create Table] limite int identity
    Par joefou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/06/2005, 09h45

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