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 :

Evaluer une variable T-SQL


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Evaluer une variable T-SQL
    Bonjour à tous,

    J'ai une base "DBBases" qui contient une table listant toutes mes sous bases.
    Je cherche à boucler sur les noms de mes bases et faire des "use nom_de_base" afin faire des insert dans toutes mes bases.

    Voilà le code :

    declare @nbBases int
    declare @index int
    declare @baseName varchar(50)

    set @nbBases = (select count(*) from DBbases)
    set @index = 0

    while @index < @nbBases
    begin
    set @baseName = (select base_name from bases where id_base = @index)

    use @baseName

    insert into maTable (val1) values ('toto');
    end


    Seulement, j'ai une erreur sur le "use @baseName".

    Comment faire pour qu'il évalue @baseName afin d'en utiliser la valeur ?

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    C'est normal que ceci ne fonctionne pas. Déjà essayer. Je te conseille d'imbriquer l'ensemble de tes commande dans une chaîne et d'effectuer une requête dynamique.

    En reprenant un peu ton exemple, quelques choses du type :
    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 @nbBases int
    declare @index int
    declare @baseName varchar(50)
    declare @query varchar(800)
     
    set @nbBases = (select count(*) from DBbases)
    set @index = 0
     
    while @index < @nbBases
    begin
    set @baseName = (select base_name from bases where id_base = @index)
     
    set @query = 'use '+@baseName+'
    insert into maTable (val1) values (''toto'')'
     
    execute(@query)
    end
    Mais le mieux est de préfixer ta table.
    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
     
    declare @nbBases int
    declare @index int
    declare @baseName varchar(50)
    declare @query varchar(800)
     
    set @nbBases = (select count(*) from DBbases)
    set @index = 0
     
    while @index < @nbBases
    begin
    set @baseName = (select base_name from bases where id_base = @index)
     
    set @query = 'insert into '+@baseName+'.dbo.maTable (val1) values (''toto'')'
     
    execute(@query)
    end

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Un grand MERCI !!!

  4. #4
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 213
    Points
    213
    Par défaut
    au risque de dire une bêtise mais pour la version préfixée (que je préferre également)

    Il faut écrite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @query = 'insert into '+@baseName+' ..maTable (val1) values (''toto'')'
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @query = 'insert into '+@baseName+' .dbo.maTable (val1) values (''toto'')'
    sinon il va raler sur le schema qui n'est pas indiqué

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Sur le coup Oadin, tu as totalement raison.
    J'ai toujours cette mauvaise habitude d'oublier cette information quand je préfixe mes tables. Mais c'était juste pour donner le principe. Il fauit que je devienne plus rigoureux.
    Je vais modifier le post.

    Merci.

Discussions similaires

  1. [SQL] Espace dans une variable pour SQL
    Par xtranaz dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 28/02/2008, 16h29
  2. syntaxe d'insertion d'une variable dans SQL Server
    Par hariri dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2007, 17h00
  3. 2003 VBA: Evaluer une variable dans OpenForm
    Par Jean_Benoit dans le forum Access
    Réponses: 3
    Dernier message: 24/02/2007, 23h01
  4. insérer des côtes dans une variable pl/sql
    Par illegalsene dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/01/2007, 14h20
  5. Réponses: 3
    Dernier message: 22/07/2005, 12h12

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