2017-03-29 3 views
0

Je voudrais parcourir chaque table pour une base de données donnée afin d'obtenir des valeurs uniques pour chaque champ char.Récupère des valeurs distinctes de chaque table et de chaque colonne avec SQL Server

Ma requête pourrait quelque chose comme:

for each table: 
    for each row in table: 
     select distinct char_field 
     from table 
    loop 
loop 

Comment puis-je faire?

+1

Ajouter des données et la sortie requise, pour mieux comprendre le scénario et fournir la meilleure solution appropriée du problème. –

Répondre

1

Essayez comme ça

DECLARE cur CURSOR FOR 
    SELECT 'SELECT DISTINCT ' + QUOTENAME(c.COLUMN_NAME) + 'AS ' + QUOTENAME(TABLE_CATALOG + '.' + TABLE_SCHEMA + '.' + TABLE_NAME) + ' FROM ' + QUOTENAME(TABLE_CATALOG) + '.' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) 
    FROM INFORMATION_SCHEMA.COLUMNS AS c 
    WHERE c.DATA_TYPE LIKE '%char%' 

DECLARE @cmd VARCHAR(MAX); 
OPEN cur; 

FETCH NEXT FROM cur INTO @cmd; 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    PRINT @cmd 
    EXEC(@cmd); 
    FETCH NEXT FROM cur INTO @cmd; 
END 

CLOSE cur; 
DEALLOCATE cur; 

Ce processus ouvre un curseur avec toutes les colonnes de toutes les tables, où contient char le type de données. Il créera une instruction pour sélectionner toutes les valeurs distinctes et les exécutera l'une après l'autre.