Te voy a proponer otra opción distinta.
Como ya has visto en la respuesta anterior, los parámetros solo se pueden usar para los valores de la sentencia, pero no para los nombres de campos (ni nombres de tabla ni nada por el estilo). Cuando esto ocurre, hay que concatenar esos parámetros en una
cadena de texto, y a continuación ejecutar esa cadena usando EXEC o con sp_exeutesql como se indica en la respuesta anterior.
Esto tiene un inconveniente, y es que ese mecanismo es susceptible de ataques de inyección de SQL si no saneas los parámetros antes de pasárselos al SQL.
Pues bien, ya puestos a tener que sanear los parámetros y tenerlos que concatenar en una cadena, y dado que hablas acerca de un textbox por lo que podemos presumir que estás programando el código cliente y por lo tanto no estás limitado a usar únicamente
SQL, entonces ¿por qué no hacer esta misma concatenación en el lado cliente, en lugar de hacerla en SQL?
Simplemente en tu lado cliente toma los nombres de las columnas, comprueba que no contengan inyecciones de SQL (cosa que de todas maneras deberías hacer aunque hagas la concatenación en el lado servidor) y concaténalos en la sentencia SQL. Después mandas
a ejecutar la sentencia así construida mediante un ExecuteReader o un DataAdapter. La ventaja de hacerlo en lado cliente en lugar del lado servidor es que tienes un lenguaje más potente y además probablemente estás más familiarizado con él que con el lenguaje
de lado servidor. Y de cara a la seguridad, eficiencia y rendimiento, el resultado va a ser el mismo, así que ¿por qué no hacerlo en el lado en el que tienes mayores facilidades de programación?