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 :

variable dans from


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
    Ingenieur developpement
    Inscrit en
    Septembre 2002
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingenieur developpement

    Informations forums :
    Inscription : Septembre 2002
    Messages : 175
    Par défaut variable dans from
    Bonjour,

    J'aimerai savoir s'il est possible d'utiliser le nom d'un champs en tant que nom de table dans une requête.
    J'ai toutes les tables de ma base qui contiennent un champs DateCreation.
    J'aimerai faire une requete qui m'affiche la liste de mes tables avec la première date de creation de chaque table.

    du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select
      object_name(s.id) as NomTable
      (select TOP 1 D_CREATION from @nomTable order by DateCreation) 'Premier enr'
    from sys.sysobjects s
    where s.type = 'U'
    en fonctionnel

    Merci de vos réponses

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 249
    Par défaut
    Je vois l'idée mais non M. SQL n'a pas prévu ça.

    La solution passe par une table temporaire où tu mets le résultat de ta première requête et ensuite de venir renseigner ta date via un curseur et une requête 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
     
    create table #MesTables 
    (NOM_TABLE varchar(500), 
    DateCreation datetime null)
     
    insert into #MesTables (NOM_TABLE)
    select  object_name(s.id)
    FROM sys.sysobjects s
    WHERE s.type = 'U'
     
    declare crTbl cursor for select NOM_TABLE from #MesTables
    declare @tbl varchar(500),
               @req varchar(MAX)
    open crTbl
    fetch next from crTbl into @tbl
    while @@fetch_status = 0
    begin
      set @req = 'update #MesTables set DateCreation = (select MAX(DateCreation) from ' + @tbl + ')'
      exec (@req)
      fetch next from crTbl into @tbl
    end
    close crTbl
    deallocate crTbl
     
    select * from #MesTables

  3. #3
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Ce n'est pas plus simple de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT name, create_date
    FROM sys.tables
    On a ici la date de création de chaque table.

    ++

  4. #4
    Membre confirmé
    Profil pro
    Ingenieur developpement
    Inscrit en
    Septembre 2002
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingenieur developpement

    Informations forums :
    Inscription : Septembre 2002
    Messages : 175
    Par défaut
    Non, ce n'est pas la date de création de la table mais un champ de chaque table qui s'appelle DateCreation qui est mis à jour par trigger au moment de l'insertion d'un enregistrement. Chaque enregistrement dans une table a, comme cela une date de creation.
    Mon but est de purger certaines de mes tables d'archives par rapport à une date de création des enregistrements.
    Je veux pouvoir choisir une date de purge en fonction de la date de création la plus ancienne de mes tables.

    Je suis plutôt parti sur la requête dynamique de EMC51 avec une petite correction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'update #MesTables set DateCreation = (select MIN(DateCreation) from ' + @tbl + ') where NOMTABLE = ''' + @tbl + ''''
    merci.
    S'il y a plus simple, n'hésitez pas

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 249
    Par défaut
    En effet j'avais oublié le where...


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

Discussions similaires

  1. Utilisation d'une variable dans FROM
    Par kouette dans le forum PL/SQL
    Réponses: 11
    Dernier message: 30/05/2011, 10h42
  2. procédure avec variable dans le from
    Par cedlensois dans le forum Développement
    Réponses: 2
    Dernier message: 24/03/2009, 09h50
  3. PLSQL: placer une variable dans une clause FROM
    Par Tiéry dans le forum PL/SQL
    Réponses: 6
    Dernier message: 02/03/2009, 15h43
  4. variable dans clause from
    Par LesDeuxZ dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/06/2007, 11h34
  5. Variable dans la clause from ?
    Par All Jinx dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/11/2006, 11h38

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