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

Développement SQL Server Discussion :

Ajouter une colonne dans plusieurs tables a la fois


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 39
    Points
    39
    Par défaut Ajouter une colonne dans plusieurs tables a la fois
    Bonjour,

    je cherche a faire un script me permettant d'insérer dans une liste de tables 4 nouvelles colonnes, qui auront le meme nom (la liste de tables sera dans une table tempo et parcourue).
    J'ai plusieurs centaines de tables dans ma SGBD et plusieurs dizaines seront modifiées, d'ou la nécessité d'un script.
    Est-ce possible de faire cela et si oui, comment procéder car la je bute un peu ?

    Merci.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Vous pouvez faire comme suit :

    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
    SET NOCOUNT ON
    GO
     
    DECLARE @liste_table TABLE
    (
    	table_name sysname
    )
     
    DECLARE @colonnes_a_ajouter TABLE
    (
    	column_type_and_nullability nvarchar(256)
    )
     
    INSERT	INTO @liste_table (table_name) VALUES ('maTable1'), ('maTable2'), ('maTable3'), ('maTable4')
    INSERT	INTO @colonnes_a_ajouter VALUES ('colonne1 int NOT NULL'), ('colonne2 datetime'), ('colonne3 varchar(20)'), ('colonne4 bit NOT NULL')
     
    DECLARE @sql varchar(max)
     
    SELECT		@sql = CASE
    				WHEN @sql IS NULL THEN 'ALTER TABLE ' + T.table_name + ' ADD ' + C.column_type_and_nullability
    				ELSE @sql + 'ALTER TABLE ' + T.table_name + ' ADD ' + C.column_type_and_nullability
    		END + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10)
    FROM		@liste_table AS T
    CROSS JOIN	@colonnes_a_ajouter AS C
     
    PRINT	@sql
    --EXEC	(@sql)
    Notez au passage que l'on peut ajouter des colonnes NOT NULL uniquement aux tables qui n'ont encore aucune ligne.
    Dans le cas contraire, vous devrez ajouter le colonne, puis la mettre à jour avec des valeurs, et ensuite la rendre non-NULLable.
    Une alternative est d'ajouter une contrainte de valeur par défaut, qui fait le travail pour vous mais met toute la colonne à la valeur par défaut.
    Vous pouvez spécifier une telle contrainte dans la colonne column_type_and_nullability.

    Voici une autre écriture, que vous pouvez employer sous SQL Server 2005 ou 2008 :

    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
    DECLARE @sql varchar(max)
     
    ;WITH
    	CTE_TABLES AS
    	(
    		SELECT 'maTable1' AS table_name
    		UNION ALL SELECT 'maTable2'
    		UNION ALL SELECT 'maTable3'
    		UNION ALL SELECT 'maTable4'
    	)
    	, CTE_COLONNES AS
    	(
    		SELECT 'colonne1 int NOT NULL' AS column_type_and_nullability
    		UNION ALL SELECT 'colonne2 datetime'
    		UNION ALL SELECT 'colonne3 varchar(20)'
    		UNION ALL SELECT 'colonne4 bit NOT NULL'
    	)
    SELECT		@sql = CASE
    				WHEN @sql IS NULL THEN 'ALTER TABLE ' + T.table_name + ' ADD ' + C.column_type_and_nullability
    				ELSE @sql + 'ALTER TABLE ' + T.table_name + ' ADD ' + C.column_type_and_nullability
    		END + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10)
    FROM		CTE_TABLES AS T
    CROSS JOIN	CTE_COLONNES AS C
     
    PRINT	@sql
    --EXEC	(@sql)
    Vous pouvez choisir de dé-commenter le EXEC (@sql), ou bien de générer le code et de l'exécuter tranquillement à la main dans une fenêtre de requête.

    @++

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 39
    Points
    39
    Par défaut
    Merci a toi, tu m'as bien aidé !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/06/2014, 16h10
  2. Ajouter une colonne dans une table via une requête
    Par Alien_psy dans le forum Requêtes et SQL.
    Réponses: 25
    Dernier message: 23/02/2013, 05h24
  3. Après l'ajout d'une colonne dans ma Table
    Par joker.med dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 01/05/2010, 16h18

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