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 :

[Débutant] Changer le type d'une colonne


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut [Débutant] Changer le type d'une colonne
    Salut,

    J'essaie de changer le type d'une colonne sous SQL Server 2000.
    J'ai une colonne clé primaire de type varchar(6) que je voudrais définir en numéro auto-incrémenté. Après quelques recherches sur le forum, j'ai essayé cela, mais ça na marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ALTER TABLE PALETTE
    	ALTER COLUMN pal_id INTEGER IDENTITY(1,1) NOT NULL PRIMARY KEY
    Ca me donne le message suivant :
    "Serveur*: Msg 156, Niveau 15, État 1, Ligne 2
    Syntaxe incorrecte vers le mot clé 'IDENTITY'."

    Merci d'avance pour toute info.

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Tu recrées une copie de cette table avec la colonne en INT avec la contrainte souhaité puis tu copies les données de la table sources vers la tables images.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    OK, donc il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * into nouvelle_table from ancienne_table
    Mais comment préciser que la clé primaire n'a pas le même type, je suis pas un pro de SQL....?

    Merci.

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    En faisant,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO TableNouvelle
    SELECT Cast(C_1 as Integer),C_2 .....C_n 
    FROM TableAncienne
    Vous allez forcer la convertion en INT.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    J'ai dû au préalable créer la table "TableNouvelle", mais au choix du type de la clé primaire, j'ai pris "int" et je n'ai pas eu la possibilité de préciser que c'était un numéro auto-incrémenté !
    Ensuite, j'ai copié toutes les données de la table ancienne vers la nouvelle table avec la requête "INSERT INTO"...

    Comment faire pour faire de la clé un numéro qui s'incrémente automatiquement ?

    Merci d'avance.

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Soit, tu crées un diagramme dans Enterprise Manager et dan ce diagramme, vous avez la possibilité de faire cette modification dans les propriétés d'une table que vous pouvez avoir par clique droit.
    Soit, vous faites ceci :

    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
     
    BEGIN TRANSACTION
    --Fixer les options de la transaction
    SET QUOTED_IDENTIFIER ON
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    GO
    --Creation de la table Temporaire
    CREATE TABLE dbo.Tmp_T_VERSEMENT
    	(
    	VER_ID int NOT NULL IDENTITY (1, 1),
    	CLI_ID int NOT NULL,
    	VER_MANTANT numeric(8, 0) NOT NULL,
    	VER_DATE datetime NOT NULL
    	)  ON PRIMARY
    GO
    --Activer l'insertion dans les champs auto-incrementés
    SET IDENTITY_INSERT dbo.Tmp_T_VERSEMENT ON
    GO
    --Tester l'existance de la table avant la copie des données dans la table
    IF EXISTS(SELECT * FROM dbo.T_VERSEMENT)
    	 EXEC('INSERT INTO dbo.Tmp_T_VERSEMENT (VER_ID, CLI_ID, VER_MANTANT, VER_DATE)
    		SELECT VER_ID, CLI_ID, VER_MANTANT, VER_DATE FROM dbo.T_VERSEMENT TABLOCKX')
    GO
    --Désactiver l'insertion dans le champs auto-incrementé
    SET IDENTITY_INSERT dbo.Tmp_T_VERSEMENT OFF
    GO
    --Suppretion de la table versement
    DROP TABLE dbo.T_VERSEMENT
    GO
    --Renons de la table temp
    EXECUTE sp_rename N'dbo.Tmp_T_VERSEMENT', N'T_VERSEMENT', 'OBJECT'
    GO
    --Ajout de la clé primaire
    ALTER TABLE dbo.T_VERSEMENT ADD CONSTRAINT
    	PK_VERS PRIMARY KEY CLUSTERED 
    	(
    	VER_ID
    	) ON [PRIMARY]
     
    GO
    --Valider la modification
    COMMIT

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    OK, j'ai opté pour le diagramme et ça marche bien, maintenant, j'ai un index auto-incrémenté, merci bcp !

  8. #8
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Je le savais

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 74
    Points : 62
    Points
    62
    Par défaut
    ça peut fonctionner dans certains cas...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE MATABLE
    ALTER COLUMN MONCHAMP DECIMAL(18,3)
    avec MATABLE.MONCHAMP est DECIMAL(18,0)
    seb

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

Discussions similaires

  1. [WD14] Changer le type d'une colonne
    Par kuranes dans le forum WinDev
    Réponses: 6
    Dernier message: 09/03/2009, 17h14
  2. Changer le type d'une colonne
    Par Vincent_D dans le forum Oracle
    Réponses: 2
    Dernier message: 11/10/2007, 15h54
  3. Changer le type d'une colonne
    Par Poisson59 dans le forum Oracle
    Réponses: 2
    Dernier message: 06/12/2005, 13h59

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