¿Serías capaz de usar algo como esto?
DECLARE @Tab VARCHAR(MAX)
SET @Tab = 'CREATE TABLE #Whatever ('
SELECT @Tab = @Tab + QUOTENAME(ColumnName) + ' INT NULL
,'
FROM @This
SELECT @Tab = SUBSTRING(@Tab,1,LEN(@Tab)-1) + ')'
PRINT @Tab
-- EXEC (@Tab)
Dos puntos:es posible que necesite crear la tabla temporal sin usar sql dinámico, luego ajuste la declaración de selección para modificar la tabla; esto es para que la tabla exista en el contexto actual; si la declaración de creación está en la dinámica, es posible que obtenga un error.
No me gusta usar sql dinámico como este:si pudiera usar un pivote más tarde para devolver las columnas, esa podría ser una mejor opción (no estoy seguro de si es posible en este caso).