Анализатор кода говорит вам, что вам, скорее всего, следует вызывать процедуру с некоторыми параметрами, а не отправлять SQL по проводам.
Это не имеет значения, независимо от того, используете ли вымакрос для генерации ваших операторов SQL. Если вы отправляете необработанный SQL по проводам, вы открыты для Атаки SQL-инъекций
Отправка команд SQL на конечную точку с несанкционированным вызовом.Если мы запустим анализатор сетевых пакетов, мы увидим, что у вас есть база данных, настроенная на отправку команд SQL, поэтому мы можем внедрить в систему нелегальный SQL
Вы все еще можете полагаться на одну процедуру длявызывая ваши обновления, но если вы решите перейти к процедурам, зачем вам это нужно?
EDITED , чтобы привести пример
create PROC sp_CommonSelectFromTableProc @tableName varchar(32)
AS
-- code to check the tableName parameter does not contain SQL and/or is a valid tableName
-- your procedure code here will probable use
-- exec mydynamicSQLString
-- where mydynamicSQLString is constructed using @tableName
END;
или, может быть, специфичная для таблицы процедура
create PROC sp_SelectFromSpecificTableProc
AS
SELECT * FROM SpecificTable
END;
Важно помнить, что SQL-инъекция не зависит от технологии , используемой для базового приложения .
Это просто явно, когда приложение содержит такие конструкции, как
return new string[] {
"SELECT * FROM " + TableName,
"SELECT * FROM " + TableName + " WHERE 1=2",
"SELECT * FROM " + TableName + " WHERE [" + TableName + "Id] = @id",
"SELECT * FROM " + TableName + " WHERE [" + TableName + "Id] = IDENT_CURRENT('" + TableName + "')",
"SELECT * FROM " + TableName + " WHERE [" + ColumnName + "] = @value"
SQL-инъекция должна быть адресована на обоих концах канала данных.
Здесь является довольно хорошей отправной точкой для понимания того, как уменьшить атаки SQL Injection