[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