Как я могу использовать динамический sql для изменения разделенного запятыми параметра в хранимой процедуре для использования в предложении IN? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть логика, которая получает значение из выбранной строки GridView и создает строку, которая используется в качестве параметра для хранимой процедуры:

protected void ChkSelect_CheckedChanged(object sender, EventArgs e)
{
    try
    {
        CheckBox chkSel = sender as CheckBox;
        string id = chkSel.Attributes["data-id"].ToString();

        if (chkSel.Checked == true)
        {
            ids += (ids.Length == 0 ? id : "," + id);
        }
        else
        {
            string existingCodes = id;
            ids = existingCodes.Replace(id, "");
        }
    }
    catch (Exception ex)
    {
        lblTest.Text = ex.Message;
    }
}

Итак, если я выберу, например, двав строках, с идентификаторами «123» и «456», параметр будет иметь следующее значение: «123,456»

Затем я отправлю его в качестве параметра в хранимую процедуру, которая имеет логику, обновляющую данные, которые имеютэти идентификаторы:

UPDATE MyTable SET Type = 'E' WHERE id in(@id) 

При выполнении этого у меня появляется ошибка:

Преобразование не удалось при преобразовании значения varchar 123,456 в тип данных int

Я полагаю, что это происходит из-за того, что параметр, который я отправляю, равен «123 456».

Мне нужно изменить его с помощью динамического sql, чтобы выражение update выглядело так, когда @id заменяется действительными значениями:

 UPDATE MyTable SET Type = 'E' WHERE id in(123,456)
or
 UPDATE MyTable SET Type = 'E' WHERE id in('123','456') 

Как я могу это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...