[SQL Server] Afficher la liste des valeurs renseignées dans toutes les colonnes d'une table

-- =============================================

-- Author:        Zouhaier KHARROUBI

-- Create date:   12/12/2016

-- Description:   Afficher la liste des valeurs renseignées dans toutes les colonnes d'une table

-- =============================================

IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'tempdb..#Colonnes'))

      BEGIN

            DROP TABLE #Colonnes

      END        

           

CREATE TABLE #Colonnes

(

      Num_Lig                      int identity(1,1),

      Nom_Col                      VARCHAR(150),

      Nom_Table               VARCHAR(150),

      Valeurs_Champ           varchar(max)      NULL,

      Nbre_Valeurs            int                     NULL

     

)

DECLARE @Nom_Table                VARCHAR(250)

            ,@Nom_Champ             VARCHAR(250)

            ,@Valeurs_Champ         VARCHAR(MAX)

            ,@Valeurs_ChampOut      VARCHAR(MAX)

            ,@Nbre_Valeurs          INT

            ,@Nbre_ValeursOutINT

            ,@Num_Lig               INT

            ,@Nbre_Lig              INT

            ,@Requete               NVARCHAR(MAX)

SELECT @Nom_Table = 'MA_TABLE'

INSERT INTO #Colonnes(Nom_Col,Nom_Table)

SELECT T2.name,T1.name FROM Ma_Base.sys.objects T1

JOIN Ma_Base.sys.columns T2 ON T2.object_id=T1.object_id

WHERE T1.name=@Nom_Table

AND T2.name <>'Champ1'

ORDER BY T2.column_id

SELECT @Nbre_Lig = COUNT(*) FROM #Colonnes

SELECT @Num_Lig = 1

WHILE @Num_Lig <= @Nbre_Lig

      BEGIN

            SELECT      @Valeurs_Champ = ''

                        ,@Nbre_Valeurs    = 0

           

            SELECT @Nom_Champ = Nom_Col FROM #Colonnes WHERE Num_Lig = @Num_Lig

           

            SELECT @Requete = N'SELECT @Nbre_ValeursOut = COUNT([' + @Nom_Champ + ']) FROM ('

            SELECT @Requete = @Requete + N'SELECT DISTINCT [' + @Nom_Champ + '] FROM Ma_Base..' + @Nom_Table + ' WHERE ISNULL(CAST([' + @Nom_Champ + '] AS VARCHAR(250)),'''')<>'''') R '

           

            EXECUTE sp_executesql@Requete , N'@Nbre_ValeursOut  INT OUTPUT', @Nbre_ValeursOut = @Nbre_Valeurs OUTPUT

           

            IF @Nbre_Valeurs>1

                  BEGIN

                        SELECT @Requete = N'SELECT @Valeurs_ChampOut = ISNULL(CAST(@Valeurs_ChampOut AS NVARCHAR(MAX)),'''') + '' / '' + ' + 'CAST([' + @Nom_Champ + '] AS VARCHAR(250)) FROM ('

                        SELECT @Requete = @Requete + N'SELECT DISTINCT [' + @Nom_Champ + '] FROM Ma_Base..' + @Nom_Table + ' WHERE ISNULL(CAST([' + @Nom_Champ + '] AS VARCHAR(250)),'''')<>'''') R'

                        EXECUTE sp_executesql@Requete , N'@Valeurs_ChampOut      NVARCHAR(MAX) OUTPUT ', @Valeurs_ChampOut = @Valeurs_Champ OUTPUT                      

                        --SELECT @Requete

                       

                        UPDATE #Colonnes

                             SET

                                   Valeurs_Champ    = SUBSTRING(@Valeurs_Champ,2,LEN(@Valeurs_Champ))

                                   ,Nbre_Valeurs     = @Nbre_Valeurs        

                        WHERE Nom_Table = @Nom_Table AND Nom_Col=@Nom_Champ

                       

                  END

            SELECT @Num_Lig = @Num_Lig + 1   

      END

SELECT T1.Nom_Table,T1.Nom_Col,    T1.Valeurs_Champ,T1.Nbre_Valeurs FROM #Colonnes T1

ORDER BY Nom_Col