Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/01/2011, 11h08   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 1
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 1
Points : 0
Points : 0
Par défaut SQL 2010 Taux de remplissage des colonnes / tables

Bonjour,

J'ai backupé notre CRM sur un SQL SERVER 2010 avec l'objectif de migré vers un ERP.

Dans cet objectif j'essaie d'identifier les champs qu'on aurait pu mettre dans le CRM et dont l'intérêt n'est pas certain.

J'aimerai savoir s'il existe un moyen au sens large du terme, pour connaitre par table, le remplissage de chaque colonnes.

Exemple :
Ma table contient 100K enregistrement, la colonne X est rempli à dans 30K enregistrement je peux en conclure que le taux de remplissage est de 30% pour cette colonne.

Merci d'avance.
christophe06000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 17h25   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 665
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 665
Points : 8 707
Points : 8 707
Bonjour,

En supposant que les statistiques de vos colonnes sont maintenues de façon automatique (ce qui est le cas si vous n'avez pas changé les paramètres de la base de données), vous pouvez utiliser le script :

Code :
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
DECLARE @column_statistics TABLE
(
	range_hi_key varchar(max)
	, range_rows bigint
	, eq_rows bigint
	, distinct_range_rows bigint
	, avg_range_rows bigint
)
 
DECLARE	@table_statistics TABLE
(
	table_name sysname
	, table_row_count bigint
	, column_name sysname
	, stat_name sysname
	, null_row_count bigint
)
 
INSERT INTO @table_statistics
(
	table_name
	, table_row_count
	, column_name
	, stat_name
)
SELECT		T.name AS table_name
		, PS.row_count 
		, C.name AS column_name
		, S.name AS stat_name
FROM		sys.stats AS S
INNER JOIN	sys.stats_columns AS SC
			ON S.object_id = SC.object_id
			AND S.stats_id = SC.stats_id
INNER JOIN	sys.COLUMNS AS C
			ON C.object_id = SC.object_id
			AND C.column_id = SC.column_id
INNER JOIN	sys.TABLES AS T
			ON T.object_id = C.object_id
INNER JOIN	sys.dm_db_partition_stats AS PS
			ON PS.object_id = T.object_id 
WHERE		PS.index_id BETWEEN 0 AND 1 
AND		S.name LIKE '!_WA!_Sys!_%' ESCAPE '!'
 
DECLARE	@table_name sysname
	, @stat_name sysname
	, @sql varchar(1024)
	, @eq_rows bigint
 
WHILE EXISTS
(
	SELECT	*
	FROM	@table_statistics
	WHERE	null_row_count IS NULL
)
BEGIN
	SELECT	TOP (1) @table_name = table_name
		, @stat_name = stat_name
		, @eq_rows = NULL
	FROM	@table_statistics
	WHERE	null_row_count IS NULL
 
	SELECT	@sql = 'DBCC SHOW_STATISTICS (' + @table_name + ', ' + @stat_name + ') WITH HISTOGRAM'
	PRINT	@sql
 
	INSERT	INTO @column_statistics
	EXEC	(@sql)
 
	SELECT	@eq_rows = eq_rows
	FROM	@column_statistics
	WHERE	range_hi_key IS NULL
 
	UPDATE	@table_statistics
	SET	null_row_count = ISNULL(@eq_rows, 0)
	WHERE	stat_name = @stat_name
 
	DELETE	FROM @column_statistics
END
 
SELECT	table_name
	, column_name
	, CAST((CAST(null_row_count AS decimal(21, 2)) / CASE table_row_count WHEN 0 THEN 1 ELSE table_row_count END) * 100 AS decimal(5,2)) AS null_ratio
FROM	@table_statistics
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h37.


 
 
 
 
Partenaires

Hébergement Web