Bonjour
En créant une requette à la volée, par l'utilisation d'un cursor
ça a ses limitations, mais dans certains cas ça peut aider.
DECLARE @ColumnName NVARCHAR(128)
DECLARE @Query NVARCHAR(4000)
--on recherche le nom des colonnes de la tables test1 via un cursor pour faire un itération
DECLARE mon_Cursor CURSOR FOR
SELECT syscolumns.name AS [COLUMN] FROM syscolumns INNER JOIN sysobjects ON syscolumns.id = sysobjects.id WHERE (sysobjects.name = N'test1')
OPEN mon_Cursor
-- dans l'itération, on va construire une requette
FETCH NEXT FROM mon_Cursor INTO @ColumnName
-- au début la requette consiste en : le nom de la premiere colonne et la colonne ex: select 'A' as [column], A from test1
set @Query= ('select ''' + @ColumnName + ''' AS [COLUMN], '+@ColumnName+' AS [Value] from test1')
-- pour les itérations suivante, on concatene la meme requette, mais sur les autres colonnes, avec une clause UNION ALL
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM mon_Cursor INTO @ColumnName
set @Query = @Query + ' Union all select ''' + @ColumnName + ''' AS [COLUMN], '+@ColumnName+' AS [Value] from test1'
END
CLOSE mon_Cursor
DEALLOCATE mon_Cursor
-- il ne reste plus qu'à executer le requette
exec (@query)
Bob.
C# is amazing, enjoy it!