begin process at 2010 02 10 04:11:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > NB LIGNES PAR TABLE

NB LIGNES PAR TABLE


 Information sur la source

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :ligne, nombre, taille, calculer, table Niveau :Expert Date de création :14/10/2004 Vu :6 099

Auteur : Benouille

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Ce code m'avait servi il y a un an pour "mesurer" une base de données en renvoyant pour chaque table le nombre de lignes. Cela permet de parler volumétrie avec des néophytes. En fait ce code génère un script qu'il faut éxécuter.

Je le mets pour l'utilisation du curseur notemment.

Source

  • -- Curseur pour le nom des tables
  • Declare @sNomTable nVarChar (150)
  • --Declare @iNbLignes Int
  • Declare curNomTable Cursor For
  • Select sysobjects.name
  • From dbo.sysobjects sysobjects
  • Where xtype = 'U'
  • -- Ouverture du curseur sur la première table.
  • Open curNomTable
  • Fetch Next From curNomTable
  • Into @sNomTable
  • -- Boucle sur les tables
  • While @@FETCH_STATUS = 0
  • Begin
  • -- on affiche un Select pour chaque base, il faudra ensuite éxécuter le résultat.
  • Print ('
  • Select ''' + @sNomTable + ''' As NomTable, Count (*) As NbLignes
  • From [' + LTrim (RTrim (@sNomTable)) +']
  • ')
  • -- table suivante
  • Fetch Next From curNomTable
  • Into @sNomTable
  • -- union ou order by selon que c'est la derniere ligne ou non.
  • If @@FETCH_STATUS <> 0
  • Print (' Order By NbLignes Desc')
  • Else Print (' Union')
  • Print ('')
  • End
  • -- Fermeture du curseur
  • Close curNomTable
  • Deallocate curNomTable
-- Curseur pour le nom des tables
Declare	@sNomTable	nVarChar (150)
--Declare	@iNbLignes 	Int
Declare	curNomTable 	Cursor For
	Select	sysobjects.name
	From 	dbo.sysobjects sysobjects
	Where 	xtype = 'U'

-- Ouverture du curseur sur la première table.
Open	curNomTable
Fetch 	Next From curNomTable
Into	@sNomTable

-- Boucle sur les tables
While	@@FETCH_STATUS = 0
Begin
	-- on affiche un Select pour chaque base, il faudra ensuite éxécuter le résultat.
	Print 	('
		Select	''' + @sNomTable + ''' As NomTable, Count (*) As NbLignes
		From	[' + LTrim (RTrim (@sNomTable)) +']
		')

	-- table suivante
	Fetch Next From curNomTable
	Into	@sNomTable

	-- union ou order by selon que c'est la derniere ligne ou non.
	If	@@FETCH_STATUS <> 0
		Print ('		Order By NbLignes Desc')
	Else	Print ('		Union')
	Print ('')
End

	
-- Fermeture du curseur
Close 	curNomTable
Deallocate curNomTable

 Conclusion

ATTENTION: CE CODE GENERE UN SCRIPT QU'IL FAUT EXECUTER!

copiez le code dans un " analiseur de requetes", éxécutez le (F5), récupérez le résultat en le copiant dans une nouvelle fenêtre et éxécutez.


 Sources du même auteur

[SQL SERVER] AJOUTER X MINUTES À UNE HEURE DONNÉE ÉCRITE DE ...
RENVOYER LES 10 PREMIÈRE LIGNES SUR TOUTES LES COLONNES D'UN...

 Sources de la même categorie

CAPTURE DES CHANGEMENTS DE DONNÉES (CDC: CHANGE DATA CAPTURE... par wissemhabboub
INTERPRETEUR BRAINFUCK par coucou747
CRÉATION D'UNE BASE DE DONNÉE AVEC FICHIER DE DONNÉES, JOURN... par fearmaker
MYSQL : CRÉATION D'UN GUID par maitredede
SQL SERVER 2005 : OBTENIR LA LISTE DES BASES DE CONTENU D'UN... par fabrice69

 Sources en rapport avec celle ci

Source avec Zip CONVERSION DE NOMBRE EN LETTRES (SQL) par wormlore
CRÉATION D'UNE BASE DE DONNÉE AVEC FICHIER DE DONNÉES, JOURN... par fearmaker
SQL SERVER 2005 - RECUPERER LA LISTE DES INDEXES EXISTANT SU... par fabrice69
SQL SERVER - TESTER L'EXISTANCE D'UN OBJET par skweeky
REQUETE PERMETTANT DE GÉNÉRER UN NOMBRE ALÉATOIRE SUR 9 DIGI... par redog26

Commentaires et avis

Commentaire de ploubat le 15/10/2004 10:52:35

Un truc sympa c'est la proc sp_msforeachtable pas toujours documentée par MS mais on trouve tout sur le net (Il y a aussi sp_msforeachdb)

Sinon, pour optimiser à la place du count(*) tu peux mettre un count sur le nom d'une colonne ou mieux si tu disposes de PK ou UK utiliser la colonne rows de la table sysindexes

Pascal

Commentaire de shaiulud le 24/11/2004 20:02:15

juste un commentaire sur le count(*) et l'optimisation

il est à éviter car le moteur sql ramène les lignes avant de les compter.
il est plus judicieux d'utiliser Count (0) As NbLignes

Commentaire de rastapaye le 24/03/2005 22:02:16

Un curseur INSENSITIVE serait encore mieux.
Un NOLOCK lors du SELECT serait un plus.
Et un @@FETCH_STATUS <> -1 serait finalement parfait

Commentaire de Benouille le 30/03/2005 14:29:32

> Un curseur INSENSITIVE serait encore mieux.
ah bon? c'est quoi ça?

> Un NOLOCK lors du SELECT serait un plus.
ah bon? c'est quoi ça?

> Et un @@FETCH_STATUS <> -1 serait finalement parfait
ah bon? c'est quoi ça? ... euh je veux dire ah bon? pourquoi ça?

:)

vb nouille, mais aussi SQL NOUILLE!

[b] VBNouille. [/b]

Commentaire de rastapaye le 31/03/2005 08:39:46

Un curseur INSENSITIVE crée une copie des données dans TempPB et permet de ne pas locker la table.

Dans notre cas c'est une table systeme donc très peu de risque de la locker, mais c'est une bonne habitude à prendre.

Le NOLOCK se place après le nom d'une table. Il permet de lire les données d'une table même si quelqu'un est en train de les modifier. Par example,  un traitement batch fait une épuration de la table des commandes, il y a donc une transaction en cours. Si une personne fait un SELECT sans NOLOCK sur la table, il se retrouve en attante de la fin de la transaction...

Dans notre cas c'est encore une table systeme donc très peu de risque de la locker, mais c'est une bonne habitude à prendre également.

Enfin le FETCH_STATUS <> -1 permet de boucler tant qu'il n'y a plus d'élément dans le CURSEUR. Par contre il faut tester le FETCH_STATUS <> -2 car dans ce cas il y a eu une erreur de lecture.

Commentaire de nivsql le 22/06/2009 19:23:50

Je vous propose cette methode plus "simple" pour SQL Server 2005 qui utilise une vue de gestion dynamique. Elle a l'avantage de donner pour chaque table le nom de l'index cluster ou s'il n'y en a pas l'information "HEAP".

select s.name,
       o.name,
   coalesce(i.name, 'HEAP'), -- Les tables HEAP n'ont pas d'index Cluster
       p.row_count
FROM sys.dm_db_partition_stats as p
INNER JOIN sys.objects as o
on o.object_id = p.object_id
INNER JOIN sys.schemas as s
on s.schema_id = o.schema_id
LEFT OUTER JOIN sys.indexes as i
on i.object_id = p.object_id and i.index_id = p.index_id
WHERE o.type_desc = 'USER_TABLE'
AND o.is_ms_shipped = 0 AND i.index_id in (0,1)
ORDER BY s.name, o.name, coalesce(i.name, 'HEAP')

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Nombre de ligne optimal d'une table? sql server 2000 [ par vindavid38 ] ZanTarBonjour est ce quelqu'un saurait s'il y a une taille optimale (en nombre de ligne) pour une table avec SQL server 2000.??merci bcp de rep@+ Compter avec SQL [ par roud59 ] Bonjour (Bonsoir) &#224; vous tous. J'ai pos&#233; une question (par erreur) sur DelphiFR, mais&nbsp;je pense trouver quelqu'un qui pourra m'aider pus Existe-il une fonction qui retourne toujours la dernière ligne d'une table [ par SwatchDev ] La question est dans le titre... "Existe-il une fonction qui retourne toujours la derni&#232;re ligne d'une table"Dans mon cas, &#231;a serait pour fa obtenir le nombre de ligne de plusieures tables dans le meme tableau ? [ par MrdJack ] bonjour, je recherche une facon d'obtenir le nombre de ligne de plusieures tables de ma base de donn&#233;e et r&#233;cup&#233;rer le r&#233;sultat da retourner valeur des champs et le nombre d'enregistrments correspondant dans un table liée [ par the_mouette ] Bonjour tout le monde!bon, le titre n'&#233;tant pas tr&#232;s clair, je vais essayer d'expliquer mieux :de mani&#232;re simple, j'ai une table messag Problème extraire une ligne d'une table [ par bubix ] Bonjour, Comment on peut faire pour extraire les lignes d'une table. Ce que j'aimerais c'est d'extraire en premier la premi&#232;re ligne puis la suiv trou dans ma table oracle [ par bigood69 ] Bonjour,A cause d'une fausse manipulation Jointure externe sur la même table !! [ par tequila1 ] BonjourJe dois effectuer une requ&#234;te avec jointure externe, mais sur la m&#234;me table.Voici&nbsp;l' exemple :select&nbsp; &nbsp; EXTRACT(YEAR_M insertion de nombre de 1 à N [ par ftug ] Bonjour,j'aimerai inserer dans une table des nombre de 1 &#224; N avec le moins de requetes possible ( le serveur SQL est d&#233;j&#224; bien charg&#2 Calculer un Rang suivant 3 critères [ par Seb33300 ] Salut a tous,j'ai du mal a trouver la requete pour calculer un rang :J'ai par exemple une table : MEMBRE(id, points, victoires, defaites) -&gt; points


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales