J'essaie de faire un curseur sur une base de données SQL Server pour obtenir toutes les valeurs distinctes de chaque table. Je veux la table avec des valeurs pour ressembler à ceci:Curseur pour obtenir toutes les valeurs distinctes de chaque table et champ sur SQL Server 2008
Database Schema Table Field Value
A dbo T1 F1 1
A dbo T1 F1 2
A dbo T1 F1 3
... ... ... ... ...
Mon problème est que lorsque je tente de mettre le nom de base de données, avec QUOTENAME (TABLE_CATALOG), Il n'évalue pas la fonction, et au lieu, il écrit la fonction dans la table que je veux générer. J'ai essayé avec des guillemets simples ou doubles sans résultats.
Comment écrire la requête? Merci!
Set Nocount ON
DECLARE cur CURSOR FOR
SELECT 'SELECT DISTINCT ' + ''' QUOTENAME(TABLE_CATALOG) + '''+' As DBName,'+ + QUOTENAME(c.COLUMN_NAME) + ' AS Datos' + ' 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;
Set Nocount OFF
BTW: Je pris le code et édité à partir d'un exemple (Get distinct values from each table and each column with SQL Server)
Vous ne devez pas utiliser les vues INFORMATION_SCHEMA pour obtenir le schéma d'un objet. MS admet qu'ils ne sont pas fiables. https://docs.microsoft.com/en-us/sql/relational-databases/system-information-schema-views/columns-transact-sql –
Re INFORMATION_SCHEMA et la détermination des schémas: https://stackoverflow.com/a/ 7310746/121544 –
Merci à ce sujet .. Je n'avais aucune idée que ce n'était pas fiable. –