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

Langage SQL Discussion :

problème Transact SQL


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 87
    Par défaut problème Transact SQL
    Bonjour,
    j'ai un probleme avec ce code :

    declare @requete varchar(100)
    declare @resultat varchar(100)
    declare @table varchar(10)

    set @table = 'matable.monchamps'

    set @resultat =(select count(*) from @table)

    print(@resultat)


    --> résultat: La variable '@table' doit être déclarée.

    si je met 'select count(*) from matable.monchamps' au lieu de 'select count(*) from @table' ca marche,
    @resultat recoit bien le resultat du count(*)

    mais ca resout pas mon probleme :
    Comment je peux faire pour utiliser @table ?

    merci

  2. #2
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    il faut utiliser une requet dynamique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DECLARE @QUERY varchar(1000)
     
    SET @QUERY = 'SELECT count(*) from ' + @table
    EXEC(@QUERY)
    par contre pour mettre le resultat de ton count dans ta variable resultat, je sais pas trop, peut etre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SET @Resultat = EXEC(@QUERY)
    Mais je pense pas que ca va fonctionner

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 87
    Par défaut
    j'ai deja essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @Resultat = EXEC(@QUERY)
    et ca marche effectivement pas

    le message d'erreur me dit que ya un erreur pres de '= EXEC'

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 35
    Par défaut Re: problème Transact SQL
    Citation Envoyé par elderion
    Bonjour,
    set @table = 'matable.monchamps'
    Mets-tu réellement un nom de table suivi d'un point puis d'un nom de champ dans la variable @table?

    parce que dans ce cas, je pense qu'il faut que tu mettes uniquement un nom de table dans @table pour exécuter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DECLARE @QUERY varchar(1000) 
     
    SET @QUERY = 'SELECT count(*) from ' + @table 
    EXEC(@QUERY)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 87
    Par défaut
    voici ce que j'arrive a faire

    declare @table varchar(20)
    declare @requete varchar(100)
    declare @resultat nvarchar(30)

    set @table = 'proprietaire.table'

    set @requete = 'select count(*) as resultat from '+ @table

    exec (@requete)

    comme résultat j'ai bien celui du count(*) : 265

    Ma dernière question et qui est la plus importante:
    comment je peux récupérer ce résultat dans une variable ?

    j'ai essayé set @resultat = exec(@requete)
    mais ca marche pas.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 87
    Par défaut
    voici ce que j'arrive a faire

    declare @table varchar(20)
    declare @requete varchar(100)
    declare @resultat nvarchar(30)

    set @table = 'proprietaire.table'

    set @requete = 'select count(*) as resultat from '+ @table

    exec (@requete)

    comme résultat j'ai bien celui du count(*) : 265

    Ma dernière question et qui est la plus importante:
    comment je peux récupérer ce résultat dans une variable ?

    j'ai essayé set @resultat = exec(@requete)
    mais ca marche pas.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 995
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 995
    Billets dans le blog
    6
    Par défaut
    Un petit exemple utilisant la base Northwind :

    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
    declare @table   sysname
    declare @requete varchar(8000) 
     
    set @table = 'dbo.Orders' 
    set @requete = 'select count(*) as resultat from '+ @table 
     
    CREATE TABLE #T (C INT)
     
    INSERT INTO #T
    EXEC (@requete) 
     
    SELECT C
    FROM   #T
     
    DROP TABLE #T
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 87
    Par défaut
    ok donc ta solution consiste a enregistrer le résultat dans une table temporaire
    ya pas un autre moyen sans utiliser une table, mais plutot en utilisant une simple variable ?

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 995
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 995
    Billets dans le blog
    6
    Par défaut
    non. Le SQL dynamique à ses limites : il s'exécute en dehors du contexte de la procédure qui le lance.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Problème Transactions SQL multiserveur
    Par patrick1140 dans le forum Coldfusion
    Réponses: 3
    Dernier message: 21/11/2010, 01h22
  2. Problème renvoie de valeurs (Fonction Transact SQL)
    Par chicken92000 dans le forum Développement
    Réponses: 1
    Dernier message: 12/09/2008, 15h18
  3. [transact SQL] problème d'ORDER BY
    Par thelpi dans le forum Langage SQL
    Réponses: 10
    Dernier message: 03/09/2008, 15h10
  4. [Transact-SQL] Problème avec "execute" dans un "if"
    Par dj_lil dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 18/12/2007, 15h56
  5. [Transact SQL] Problème recherche
    Par Escrow974 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/09/2007, 14h56

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