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

Développement SQL Server Discussion :

SQL 2010 Taux de remplissage des colonnes / tables


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1
    Points : 1
    Points
    1
    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.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    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 : 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
    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
    @++

Discussions similaires

  1. [AC-2000] Fonction donnant le taux de remplissage des champs d'une table
    Par cantador dans le forum Access
    Réponses: 7
    Dernier message: 27/10/2014, 16h37
  2. Réponses: 5
    Dernier message: 21/09/2009, 03h03
  3. [C#] Supprimer des colonnes (Table avec 2 clés primaire)
    Par sara21 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/11/2006, 21h42
  4. Pb SQL, affichage de l'entete des colonnes
    Par Yooops Up dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2005, 14h10

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