Вы не можете использовать имя столбца в качестве параметра; вы должны рассмотреть вместо построения ваш запрос таким образом:
SqlCommand command =
new SqlCommand(
String.Format(@"SELECT min(Score)
FROM MenAthletics WHERE [{0}] < @result;",
sportEvent),
connect);
command.Parameters.AddWithValue("@result", result);
Этот вид SQL называется «динамический SQL» и может быть эффективным способом построения запросов на лету.
Однако, есть pitfalls. Помимо проверки ввода пользователя, также убедитесь, что пользователь, которого вы подключаете к базе данных, имеет только достаточные разрешения для выполнения действий, которые вы хотите выполнить.
Другой подход, который менее изящный, но может быть помещен непосредственно в хранимую процедуру, заключается в использовании оператора CASE;
Например:
SELECT min(Score)
FROM MenAthletics
WHERE
CASE
WHEN @sportEvent = 'SomeColumnName' THEN SomeColumnName
WHEN @sportEvent = 'SomeColumnName2' THEN SomeColumnName2
END < @result;
Это становится очень утомительным, как создавать и поддерживать на больших таблицах. Преимущество заключается в том, что запрос не является динамическим.
Кажется, что ваш фактический вопрос должен быть «Можно ли использовать параметры в именах столбцов?» – Mansfield
Я думаю, что вы сравниваете строку и двойной – Bosak
http://stackoverflow.com/questions/10092869/can-i-pass-column-name-as-input-parameter-in-sql-stored-procedure – Apocalyp5e