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 :

Requete sql complexe


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 31
    Points : 28
    Points
    28
    Par défaut Requete sql complexe
    Bonjour a vous. J'espere que je poste sur le bon forum car je travail sur une requete sql/asp
    voici mon code
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <%
    'récupération du choix de base :
    lieu=Request.Form("destination")
     
    'déclaration
    dim StrSQL, StrSQL2, i, nom
    StrSQL = "select name from "+lieu+".dbo.sysobjects where type='U' order by name"
    StrSQL2 = "select Count(*) from (select name from "+lieu+".dbo.sysobjects where type='U'")"
     
    if StrSQL <> "" then	
    	dim Nbrecs
    	dim Nblign
    	dim nb
    	dim nomBDD
    	nb=0
    	set objConn=server.CreateObject("ADODB.Connection")
    	base="DSN=QUALIPSO;DRIVER={SQL Server};UID=sa"
    	objConn.Open base
    	set objCmd=server.CreateObject("ADODB.Command")
    	objCmd.activeconnection=objConn		
    	objCmd.CommandText=StrSQL
    	objCmd.CommandType=&H0001 'adCmdText
    	set rs=server.CreateObject("ADODB.RecordSet")
    	set rs2=server.CreateObject("ADODB.RecordSet")
    	set rs=objCmd.Execute(NbRecs,,[adCmdText])
    	rs2.Open StrSQL2,objConn
    	if rs.State = &H00000001 then 'adStateOpen
    		if not rs.eof then 
    			Response.write "Table(s) de la base de donnée <b>"+lieu+"</b><br><br>"
    			Response.Write "<table border=1 cellpadding=0 cellspacing=0>"
    			'entêtes
    			Response.Write "<tr>"
    				Response.Write "<td><font size=2><center><b>Index</b></center></font></td>"
    				response.write "<td><font size=2><center><b>Nom de la table</b></center></font></td>"
    				response.write "<td><font size=2><center><b>Nb Lignes</b></center></font></td>"
    			Response.Write "</tr>"
     
    			'données
    			NbRecs = 0
    			while not rs.eof								
    				%>
    				<tr>
    					<% 
    					for i=0 to rs.Fields.Count-1
    						nb=nb+1
    						Response.write "<td><font size=2>"& nb &"</font></td>"
    						Response.Write "<td><font size=2><a href=''>" & rs(i) & "</a></font></td>"
    						Nblign=rs2(i)
    						Response.Write "<td><font size=2>" & Nblign & "</font></td>"
    					next 
    					%>
    				</tr>
    				<%				
    				rs.movenext
    				NbRecs = NbRecs+1
    			wend
    			Response.Write "</table><br>"
    		rs.Close
    		set rs=nothing		
    	end if
     
    	objConn.Close
    	set objConn=nothing
     
    	Response.Write "Il y a " & NbRecs &" table(s)."
    	end if
    end if
    %>
    il se trouve que j'ai un problème avec ma 2eme requete StrSQL2
    Le principe de ce code est de lister toute les base de donnée de mon server ensuite l'utilisateur chosi isa base et on arrive a une nouvelle page qui liste les table de la base choisi. Jusque la j'arrive a le faire sans probleme, mais il faudrait que en face du nom de chaque table on puisse voir le nombre d'enregistrement que comporte la table. Et la ça se corse !

    Il faudrait en quelque sorte une requete qui compte le nombre de ligne

    Si jamais des gens s'y connaissent bien je suis preneur

    D'avance merci

  2. #2
    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
    Personaliser ce code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT O.NAME AS TABLE_NAME,I.ROWS AS ROW_COUNT
    FROM sysobjects O join sysindexes I
             ON O.id=I.Id
    WHERE O.XTYPE='U'
    AND permissions(o.id) != 0

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

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 31
    Points : 28
    Points
    28
    Par défaut
    Bon alors j'ai regardé un peu le code et j'ai réussi a faire une requete qui marche partiellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StrSQL = "SELECT O.NAME AS TABLE_NAME,I.ROWS AS ROW_COUNT FROM "+lieu+".dbo.sysobjects O join "+lieu+".dbo.sysindexes I ON O.id=I.Id WHERE O.XTYPE ='U'  AND permissions(o.id) != 0"
    Je voulait savoir a quoi sert et sinon il m'affiche plusieur fois le nom de la table, par exemple:
    base "Test"

    nom de la table nblign
    table1 6
    table1 0
    table1 0
    table2 2
    table3 164

    de plus pour certaine base il ne m'affiche qu'une seule table alors qu'il y en a plusieur de type 'U' pourtant

  4. #4
    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
    j'avais oublié un Distinct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DISTINCT O.NAME AS TABLE_NAME,I.ROWS AS ROW_COUNT 
    FROM sysobjects O join sysindexes I 
             ON O.id=I.Id 
    WHERE O.XTYPE='U' 
    AND permissions(o.id) != 0
    Quant à permissions(o.id) != 0, il s'agit des tables dont vous disposez des droits.

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

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 31
    Points : 28
    Points
    28
    Par défaut
    Merci bien sa commence a ressembler a ce que je souhaitait faire, par contre il y a encore des doublons sur certaine table et pas sur d'autre.



    D'ou cela peut il provenir ?

    J'ai beau essayer avec un J'ai le message d'erreur :
    [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'TABLE_NAME'.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 31
    Points : 28
    Points
    28
    Par défaut
    c'est bon j'ai réussi !!

    voial le code fianl qui marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT O.NAME AS TABLE_NAME, sum(I.ROWS) AS ROW_COUNT FROM "+lieu+".dbo.sysobjects O join "+lieu+".dbo.sysindexes I ON O.id=I.Id WHERE O.XTYPE ='U' group by O.NAME
    Merci de m'avoir aider fait avancer sur mon projet ^^

  7. #7
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 45
    Points : 48
    Points
    48
    Par défaut
    Moi je ne metterai pas SUM mais MAX pour le nb de lignes de la table. les lignes qui apparaissent en plus correspondent à des indexes donc tu risques de comptabiliser à la fois les lignes des iondexes et des tables...

    Et je crois qu'avec le GROUP BY, le DISTINCT est inutile.

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

Discussions similaires

  1. requete sql complexe
    Par susimido dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/04/2007, 15h20
  2. requete sql complexe
    Par susimido dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/04/2007, 17h01
  3. requete SQL complexe!
    Par cedlannoy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/03/2007, 20h45
  4. requete sql complexe, que faire: 2 sql imbriques ou fonction date?
    Par Aliveli dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 22/06/2006, 20h20
  5. Requete SQL complexe
    Par isa21493 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/02/2006, 16h43

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