Recorriendo nombres de columnas con SQL dinámico

Se me ocurrió una idea para que un fragmento de código muestre todos los valores distintos de cada columna y cuente cuántos registros hay para cada uno. Quiero que el código pase por todas las columnas.

Esto es lo que tengo hasta ahora ... Soy nuevo en SQL, así que soporta el noobness :)

Código difícil:

  select [Sales Manager], count(*)
  from  [BT].[dbo].[test]
  group by [Sales Manager]
  order by 2 desc

Intento de SQL dinámico:

Declare @sql varchar(max),
@column as varchar(255)

    set @column = '[Sales Manager]'
    set @sql = 'select ' + @column + ',count(*) from [BT].[dbo].[test] group by ' + @column + 'order by 2 desc'

    exec (@sql)

Ambos funcionan bien. ¿Cómo puedo hacer que pase por todas las columnas? No me importa si tengo que codificar los nombres de las columnas y se abre paso en cada una para @column.

¿Esto tiene sentido?

¡Gracias a todos!

Respuestas a la pregunta(2)

Su respuesta a la pregunta