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 :

Concaténation BD et variable - SQL Server


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 21
    Points : 22
    Points
    22
    Par défaut Concaténation BD et variable - SQL Server
    Bonjour,
    Je souhaite faire un SELECT sur une table avec un paramétrage sur le nom de base de données.

    Je m'explique:
    j'ai plusieurs base de données BD (BD2004, BD2005 .. BD2009) de même structure et je veux les centraliser sur une seule base de données (BD), alors j'ai défini l'année comme paramètre (@an) mais je ne sais pas comment pourrai-je faire pour concaténer le nom de la base et le paramètre @an.

    l'idée est comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT CHAMPS
    FROM BD+@an.LATABLE
    Merci bcp d'avance

  2. #2
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Sur SQL serveur tu ne peux pas gérer de façon dynamique explicitement. Il te faut stocker ta requète dans une variable varchar(xx) et exécuter ta variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DECLARE @strSQL varChar(200)
     
    SET @strSQL = 'SELECT monChamp, monChamp2 '
                + 'FROM maBase' + @an + '.maTable '
                + 'WHERE ... '
     
    EXEC (@strSQL)
    Mais ce n'est pas très performant il me semble.

    Cordialement
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  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 : 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,

    Effectivement c'est moins performant que d'exécuter votre commande avec sp_executeSQL, mais aussi moins puissant.

    Vous pouvez tout à fait écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DECLARE @strSQL NvarChar(200)
     
    SET @strSQL = N'SELECT monChamp, monChamp2 '
                + 'FROM maBase' + @an + '.maTable '
                + 'WHERE ... '
     
    EXEC maBD.dbo.sp_executeSQL @strSQL
    Mais il y a encore mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE @strSQL NVARCHAR(256),
    		@ParamsDef NVARCHAR(64)
     
    SET @strSQL = N'SELECT monChamp, monChamp2 '
                + 'FROM maBase' + @an + '.maTable '
                + 'WHERE maColonne = @maValeur_IN'
     
    SET @ParamsDef = '@maValeur_IN INT'
     
    EXEC maBD.dbo.sp_executeSQL
    		@strSQL,
    		@ParamsDef,
    		@maValeur_IN = 2
    Vous pouvez aussi vous retourner des valeurs :

    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
    DECLARE @strSQL NVARCHAR(256),
    		@ParamsDef NVARCHAR(64)
     
    SET @strSQL = N'SELECT @maValeur_OUT = maColonne'
                + 'FROM maBase' + @an + '.maTable '
                + 'WHERE maColonne = @maValeur_IN'
     
    SET @ParamsDef = '@maValeur_IN INT, @maValeur_OUT NVARCHAR(50)'
     
    DECLARE @maValeur NVARCHAR(50)
     
    EXEC maBD.dbo.sp_executeSQL
    		@strSQL,
    		@ParamsDef,
    		@maValeur_IN = 2,
    		@maValeur_OUT = @maValeur OUTPUT
     
    SELECT @maValeur
    L'utilisation de cette procédure stockée permet en plus de conserver les plans des requêtes ainsi générées, un bon avantage pour les performances de requêtes souvent exécutées de cette façon

    @++

  4. #4
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Je m'en rappelerais moi aussi pour la prochaine fois
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 21
    Points : 22
    Points
    22
    Par défaut
    Bonjour,
    Merci beaucoup pour votre aide, c très gentil
    A plus.

  6. #6
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  7. #7
    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
    Prennez l'habitude de consulter la faq.

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

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

Discussions similaires

  1. Nombre de paramètres variables sql server 2008
    Par Devlin111 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 25/05/2012, 11h51
  2. Concaténation de champs dans SQL Server
    Par helio500 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/04/2011, 15h14
  3. Réponses: 1
    Dernier message: 07/05/2010, 16h25
  4. Réponses: 5
    Dernier message: 09/07/2008, 17h04
  5. Réponses: 6
    Dernier message: 31/05/2007, 15h54

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