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 :

Creation de schéma à partir de variable


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Par défaut Creation de schéma à partir de variable
    Bonjour,

    Je viens à vous car j'aimerais savoir s'il est possible de faire un "create" avec une variable?

    Je m'explique...
    Je dispose d'une base de données que je dois historiser annuellement dans des schémas distinct correspondant aux années. j'ai donc deux bases de données: une courante et une autre annuelle qui varie tous les ans.

    Tous les ans je dois créer un nouveau schéma pour les nouvelles données. Cela doit se faire automatiquement à partir d'une procédure stockée. Donc pour cela, je dois faire un CREATE SCHEMA @annee, @annee évoluant avec le temps.

    Mon problème est que lorque je parse ma PS il me renvoie l'erreur suivante:
    Procedure newDatabase, Line 18 Incorrect syntax near the keyword 'SCHEMA'.
    et voici le debut de ma procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE PROCEDURE newDatabase(@annee datatype OUTPUT)
    AS
    BEGIN
     
    -- création des schéma de bdd
    CREATE SCHEMA [@annee]
    Pour info, j'appelle ma PS à partir de ma Procédure stockée C#; ma variable est initialisée la dedans aussi:

    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
     
            DateTime date = DateTime.Today;
            int annee = date.Year;
            annee = annee+1;
     
            // INSTANCIATION DE CONNEXION
     
            string stringConnexion = "string de ma connexion";
     
            try
            {
                SqlConnection con = new SqlConnection();
                con.ConnectionString = stringConnexion;
     
                // INSTANCIATION DE LA COMMANDE
     
                SqlCommand storedProcedure = new SqlCommand();
     
                //LIAISON DE LA COMMANDE A LA CONNEXION
                storedProcedure.Connection = con;
     
                // PROPRIETES DE LA COMMANDE            
                storedProcedure.CommandType = CommandType.StoredProcedure;
                storedProcedure.CommandText = "newDatabase";
                storedProcedure.Parameters.AddWithValue("@anneeSchema", annee);
    Est ce que vous auriez une réponse à mon problème?

    Merci d'avance

  2. #2
    Membre expérimenté
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Par défaut
    bonjour,
    En fait vous souhaitez construire dynamiquement l'instruction SQL que vous souhaitez executer.
    D'autre part les identifiant SQL Server ne peuvent pas commencer par un chiffre (c'est pourquoi j'ai ajouté le an dans l'exemple ci dessous
    Pour cela je vous conseil d'utiliser la procédure sp_executesql par exemple de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      declare @annee int;
      set @annee=2009;
      declare @rqt varchar(500);
      set @rqt='create schema an'+@annee;
      sp_executesql @rqt

  3. #3
    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
    Par défaut
    Bonjour,

    On peut aussi faire avec les crochets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ALTER PROCEDURE newDatabase
    	@annee INT OUTPUT
    AS
    BEGIN
    	DECLARE @SQL NVARCHAR(20)
     
    	SET @SQL = 'CREATE SCHEMA [' + CAST(@annee AS VARCHAR) + ']'
     
    	EXEC sp_executeSQL @SQL
    END

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Par défaut
    Un grand merci d'avoir répondu!

    J'essaye vos propositions dès que possible et je vous adresse un retour...

    Merci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Par défaut
    désolé du temps de réponse...

    Effectivement ca fonctionne super!

    Merci encore

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

Discussions similaires

  1. Creation d'un string a partir de variables
    Par virtuadrack dans le forum C++
    Réponses: 2
    Dernier message: 06/03/2009, 22h21
  2. Réponses: 2
    Dernier message: 29/08/2006, 19h49
  3. Réponses: 2
    Dernier message: 08/06/2006, 00h10
  4. Creation de variables a partir de variables
    Par Quatsch dans le forum C
    Réponses: 9
    Dernier message: 27/05/2006, 14h35
  5. Creation de schéma
    Par seemax dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/06/2004, 10h32

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