Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1322 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  problème T-SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème T-SQL

n°1316737
jokaritaff
Posté le 02-03-2006 à 09:50:25  profilanswer
 

Bonjour,
j'ai un probleme avec  cette requete :
 
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 'from matable.monchamps' au lieu de 'from @table' ca marche,  
@resultat recoit bien le resultat du count(*)
 
Comment je peux faire pour utiliser @table ?
 
merci
 
 

mood
Publicité
Posté le 02-03-2006 à 09:50:25  profilanswer
 

n°1316878
THX
Eleveur de Big Jim de Paris.
Posté le 02-03-2006 à 12:22:43  profilanswer
 

Tu es sûr que ca fonctionne avec 'select count(*) from matable.monchamps' ? ;)
 
declare @resultat varchar(100)  
declare @table varchar(10)  
declare @champs varchar(10)
 
set @table = 'matable'
set @champs = 'monchamps'
 
set @resultat =(select count(@champs) from @table)  
 
print(@resultat)

n°1316975
jokaritaff
Posté le 02-03-2006 à 14:11:44  profilanswer
 

ben dans l'exemple je donne pas le nom réel de la table et du champs
 
une idée pour mon probleme ?

n°1317017
THX
Eleveur de Big Jim de Paris.
Posté le 02-03-2006 à 14:36:16  profilanswer
 

J'avais bien compris que ce n'était pas le nom réel.  
 
Si tu fais un count(*) sur une table en lui indiquant ensuite le nom du champs à compter ça revient à faire un count(nomduchamps) dans une table ? ou alors j'ai oublié un bout de cerveau en me levant ce matin ? :)  
 
L'exemple donné dans mon post au dessus doit être bon non ?

n°1317041
jokaritaff
Posté le 02-03-2006 à 14:54:38  profilanswer
 

oui ca revient quelque part a faire un count(nomduchamps) sauf qu'avec le count(*) le * permet de pas avoir a preciser un champs particulier
 
mais ca marche toujours pas mee avec ton exemple.
 
En fait il faudra que  
le script SQL lise la chaine de la requete avec la variables @table incluse,
puis l'executer
puis récupérer le résultat du count() dans la variables @resultat
 
ca doit pourtant pas bien etre compliqué normalement .....
 

n°1317070
THX
Eleveur de Big Jim de Paris.
Posté le 02-03-2006 à 15:34:36  profilanswer
 

Euh je ne comprends pas...  
 
Dans ton exemple tu donne :  
 
set @table = 'matable.monchamps'  puis la tu indique que tu fais un count(*) pour ne pas avoir a préciser le nom d'un champs donc à quoi correspond 'monchamps' dans ton exemple ?  
 
Si tu fais ça :  
 
declare @resultat varchar(100)  
declare @table varchar(10)  
declare @champs varchar(10)  
   
set @table = 'matable'  
set @champs = 'monchamps'  
   
set @resultat =(select count(@champs) from @table)  
   
print(@resultat)  
 
qui revient à faire : Select count(*) from matable  
 
Ca fonctionne très bien... Mais je ne dois pas comprendre ce que tu cherches à faire :/

n°1317082
jokaritaff
Posté le 02-03-2006 à 15:50:24  profilanswer
 

j'ai compris ce que tu voulais dire.
Mon exemple est pourri. j'ai oublié d'enlever '.monchamps' qui n'a rien a faire ici.
 
Voici les 2 choses que je cherche a faire :
 
1 - créer une requete count(*) sur un nom de table inclus dans une variable  
 
exemple:
 
set @table = 'matable'
set @requete = (select count(*) from @table)
 
2 - récupérer le résultat du count(*) dans une variable @resultat

n°1322621
THX
Eleveur de Big Jim de Paris.
Posté le 10-03-2006 à 11:51:25  profilanswer
 

Ah mais oui je suis bête :/
 
Tu ne peux pas passer un nom de table dans une variable en Transact...
 
C'est un peu plus complexe ce que tu veux faire. Il faut écrire une Procédure stockée qui te permettra de mettre le nom de la table en variable.

n°1322663
jokaritaff
Posté le 10-03-2006 à 12:16:23  profilanswer
 

oué ben finalement j'ai utilisé une table #temporaire pour faire intermediaire entre le resultat de requete et la variable d'affectation
 
concernant le nom de table, c pourtant en theorie de programmation une operation super simple( concatenation de chaines)
mais je vois que le Transact SQL c de la prog SQL sous certains aspects, mais qui connait certaines limites (dont acte)

n°1322665
jokaritaff
Posté le 10-03-2006 à 12:16:35  profilanswer
 

merci pour ta solution

mood
Publicité
Posté le 10-03-2006 à 12:16:35  profilanswer
 

n°1322827
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-03-2006 à 15:36:03  profilanswer
 

declare @query as varchar(8000)
declare @resultat as numeric
 
set @query = 'select @resultat = count(*) from ' + @table
execute(@query)
print(@resultat)

n°1322839
jokaritaff
Posté le 10-03-2006 à 15:44:20  profilanswer
 

justement ce script que tu nous montre Arjuna,  
je l'ai deja testé et il marche pas
meci quand meme d'avoir essayé
 
en fait execute() exécute une requete en dynamique sans tenir compte du reste du script
 
Voici le message que je recois et qui le confirme :
"La variable '@resultat' doit être déclarée."

n°1322843
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-03-2006 à 15:47:47  profilanswer
 

:heink:
 
moi ça a toujours marché...
 
vais faire le test, ça a intérêt à pas marcher :o

n°1322849
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-03-2006 à 15:51:52  profilanswer
 

Resolved en un quart de pouillème de seconde :o
 
Faut chercher un peu, et ne pas hésiter à être goret, SQL Server il sait tout manger, même les requêtes qu'on sait pas relire :p
 

Code :
  1. begin
  2. declare @table as varchar(255)
  3. declare @query as varchar(8000)
  4. --declare @resultat as numeric
  5. set @table = 'tie'
  6. set @query = 'declare @resultat numeric select count(*) from ' + @table + ' print @resultat'
  7. execute(@query)
  8. --print(@resultat)
  9. end

n°1322856
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-03-2006 à 15:56:11  profilanswer
 

ps: sinon, à noter que dans une PS, le code que j'ai posté marche (chavais bien que ça marchait :o)

n°1322860
jokaritaff
Posté le 10-03-2006 à 15:59:22  profilanswer
 

résolument non chez moi ca marche pas
quoiqu'il en soit mon chef de projet acceptra pas que je fasse un truc "goret"

n°1322863
jokaritaff
Posté le 10-03-2006 à 16:02:26  profilanswer
 

enfin oui le execute() marche, j'ai bien le resultat affiché dans l'Analyseur de Requetes  
mais c'est pour mettre ce resultat dans la variable @resultat et pouvoir utiliser @resultat dans les script suivant de mon fichier, que ca marche pas.

n°1322887
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-03-2006 à 16:23:35  profilanswer
 

evidement, dans ce cas c'est pas évident...

n°1322901
jokaritaff
Posté le 10-03-2006 à 16:29:58  profilanswer
 

tout le probleme est là ;-)

n°1322924
THX
Eleveur de Big Jim de Paris.
Posté le 10-03-2006 à 16:40:38  profilanswer
 

Tiens voilà un truc propre :  
 
declare @resultat varchar(100)    
declare @table varchar(10)    
declare @sql nvarchar(500)
 
set @table = 'MaTable'  
   
set @sql ='select @rv=count(*) from '+ @table    
 
exec sp_executesql @sql, N'@rv int out',@rv = @resultat out
   
print(@resultat)


Message édité par THX le 10-03-2006 à 16:40:58
n°1322958
jokaritaff
Posté le 10-03-2006 à 17:05:15  profilanswer
 

yesss
ca marche nickel
merci !

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  problème T-SQL

 

Sujets relatifs
probleme boucle... grosse boucle... voir probleme à la finProblème CSS entre IE et Firefox
importer un base access dans SQL serveur 2005 express[RESOLU]probleme de recuperation des lignes d'une requete mysql
probleme pour vérifier cochage de cases radioProblème avec Win 2000 et script de config de proxy automatique
[Résolu] Problème sur Dreamweaver pour formulaireLe problème vient d'Apache ou de PHP ?
probléme d'affichage de la date[Résolu] Problème pour un INSERT INTO d'une base vers une autre
Plus de sujets relatifs à : problème T-SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR