I am wondering why I cannot use variable column name like that:
declare @a as varchar; set @a='TEST' select @a from x;
Thank you
USE db_name; DESCRIBE table_name; it'll give you column names with the type.
You can't do it because SQL is compiled before it knows what the value of @a is (I'm assuming in reality you would want @a to be some parameter and not hard coded like in your example).
Instead you can do this:
declare @a as varchar; set @a='TEST' declare @sql nvarchar(max) set @sql = 'select [' + replace(@a, '''', '''''') + '] from x' exec sp_executesql @sql
But be careful, this is a security vulnerability (sql-injection attacks) so shouldn't be done if you can't trust or well clean @a.
Because the column names are resolved at compile time not at run time for the SQL statement.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With