Я пытаюсь выполнить динамический SQL из C# и хочу использовать sp_executesql
, потому что хочу передать список строк, которые будут использоваться для оператора IN
в динамическом SQL, переданном sp_executesql
.
Дело в том, что я точно не знаю, как это сделать.
Пока я делал это так:
using (var dbCommand = databaseConnection.CreateCommand())
{
dbCommand.CommandType = CommandType.StoredProcedure;
dbCommand.CommandText = "sp_executesql";
var sqlParam = dbCommand.CreateParameter();
sqlParam.DbType = DbType.String;
sqlParam.ParameterName = "stmt";
sqlParam.Value = sql.SQL;
dbCommand.Parameters.Add(sqlParam);
var incidentIdParam = dbCommand.CreateParameter();
incidentIdParam.ParameterName = "incidentId";
incidentIdParam.DbType = DbType.Int32;
incidentIdParam.Value = arguments.filterAttributes.incidentId;
dbCommand.Parameters.Add(incidentIdParam);
dbCommand.ExecuteReader();
}
Возможно ли такое?
sp_executesql
из клиентского кода, потому что клиентский код уже может параметризовать любой оператор и при необходимости выполнять текстовую замену. Вы получите (почти) тот же эффект, установивCommandText
вsql.SQL
иCommandType
вText
. Обратите внимание, что вы не можете параметризовать предложениеIN
даже сsp_executesql
— вы можете заменить его только текстом или использовать параметр с табличным значением. См. здесь, но обязательно прочитайте принятый ответ (который является грязным взломом). - person Jeroen Mostert   schedule 07.11.2018