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 :

Création de table dynamiquement Transact-SQL


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 33
    Points
    33
    Par défaut Création de table dynamiquement Transact-SQL
    Bonjour à tous,

    Je cherche, pour m'exercer, à créer dynamiquement en transact-SQL une table.
    Le nombre et noms des colonnes varient en fonction des paramètres passé
    à la procédure.

    Exemple:

    Si je passe 1 et 4 en paramètre, je voudrai que ma table soit créé avec 4 champs nomé TBL1, TBL2, TBL3, TBL4.

    Si je passe 3 et 5 en paramètre, ma table devrai avoir 3 champs
    nomé TBL3, TBL4,TBL5.
    ...

    J'ai essayé des faire cela:

    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
     
    create procedure creatTbl @fields char(5) as
     
    	create table TBL (@fields)
    GO
     
    create procedure fieldTbl @plage1 char(2), @plage2 char(2) as	
     
    	declare @i int
    	declare @field char(5)
    	set @i = @plage1
    	--set @field = '('
     
    	while @i <= @plage2 begin
                             -- concataine chaque nom de champ et leurs type: tbl1 int, tbl2 int, ...
    		set @field = @field +'TBL'+ cast(@i as char(1)) +' int,' 
    		set @i = @i + 1
    	end	
     
    	--set @field = @field +')'
     
    	exec creatTbl @field
    GO
     
    exec fieldTbl 1,4
    Mais ca ne fonctionne pas.
    Msg erreur:

    Ligne 5 : syntaxe incorrecte vers '@fields'.
    Impossible d'ajouter des lignes à sysdepends pour la présente procédure stockée parce qu'elle dépend d'un objet absent 'creatTbl'. La procédure stockée va cependant être créée.


    On peut faire cela:
    create table TBL (@fields) ou create table TBL @fields
    ??????

  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 : 43
    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 devez pour cela écrire du code SQL dynamique :

    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
    ALTER PROCEDURE usp_CreeTable
    	@nomTable SYSNAME,
    	@numPremiereColonne INT,
    	@numDerniereColonne INT,
    	@typeColonne SYSNAME
    AS
    BEGIN
    	DECLARE @SQL VARCHAR(512)
     
    	-- Création de la liste des colonnes
    	;WITH
    		CTE_LISTE_COLONNES AS
    		(
    				SELECT @numPremiereColonne Indice
    			UNION ALL
    				SELECT Indice + 1
    				FROM CTE_LISTE_COLONNES
    				WHERE Indice < @numDerniereColonne
    		)
    	SELECT @SQL = ISNULL(@SQL, '') + 'COL' + CAST(Indice AS VARCHAR) + ' ' + @typeColonne + ', '
    	FROM CTE_LISTE_COLONNES
     
    	-- Suppression de la dernière virgule
    	SELECT @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) - 1)
     
    	-- Ajout de l'instruction CREATE TABLE
    	SET @SQL = 'CREATE TABLE ' + @nomTable + '(' + @SQL + ')'
     
    	PRINT @SQL
    	--EXEC (@SQL)
    END
    Décommentez le --EXEC (@SQL) si vous voulez créer la table

    @++

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    merci pour votre réponse

    j'ai us seulement besoin de ça:
    Bonne journée.

  4. #4
    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 : 43
    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,

    C'est exact mais pour débugger du code SQL dynamique, le PRINT est utile

    @++

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

Discussions similaires

  1. Problème de création de table en mode sql dans phppgadmin
    Par Peewee766 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/09/2015, 13h48
  2. Réponses: 3
    Dernier message: 27/11/2013, 17h20
  3. script de création de table dynamique
    Par Etienne5685 dans le forum Développement
    Réponses: 2
    Dernier message: 07/09/2011, 14h38
  4. [AC-2003] création de table sur base sql distante
    Par novice06 dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/06/2010, 11h27
  5. Création de table dynamique
    Par Bluchy dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/04/2010, 09h50

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