Причина, по которой язык не допускает параметры для таких вещей, как имена таблиц, имена столбцов и т. Д., В точности та же самая причина, по которой ваша программа на C # не допускает подстановку переменных в коде.По сути, ваш вопрос можно перефразировать следующим образом в программе на C #:
class MyClass
{
int x;
float y;
string z;
void DoSomething(string variableName)
{
this.@variable = ...
}
}
MyCLass my = new MyClass();
my.DoSomething("x"); // expect this to manuipulate my.x
my.DoSomething("y"); // expect this to manuipulate my.y
my.DoSomething("z"); // expect this to manuipulate my.z
Это, очевидно, не скомпилируется, потому что компилятор не может сгенерировать код.То же самое для T-SQL: компилятор не может сгенерировать код для определения местоположения столбца "@columnName"
в вашем случае.И так же, как в C # вы бы использовали рефлексию для такого рода уловок, в T-SQL вы бы использовали динамический SQL для достижения того же.
Вы можете (и должны) использовать QUOTENAME
функция при построении динамического SQL для защиты от внедрения SQL.