Я хочу дать этой дискуссии немного больше контекста.Кажется, это относится к теме " как мне получить несколько строк данных в sql ".В случае @ Kate она пытается DELETE-WHERE-IN, но полезные стратегии для этого пользовательского случая очень похожи на стратегии для UPDATE-FROM-WHERE-IN или INSERT INTO-SELECT FROM.На мой взгляд, есть несколько основных стратегий.
Конкатенация строк
Это самый старый и самый простой способ.Вы делаете простой "SELECT * FROM MyTable WHERE ID IN" ("+ someCSVString +"); "
- Супер простой
- Самый простой способ открыть себя для атаки SQL-инъекцией.
- Усилие, которое вы приложили для очистки строки, лучше потратить на одно из других решений
Object Mapper
Как и @MarcGravell, вы можете использовать что-то вроде dapper-dot-net, точно так же, как работает Linq-to-sql или Entity Framework.Dapper позволяет вам делать connection.Execute("delete from MyTable where ID in @ids", new { ids=listOfIds });
Аналогично, Linq позволяет вам делать что-то вроде from t in MyTable where myIntArray.Contains( t.ID )
- Объектные картографы великолепны.
- Однако, если ваш проект прямой ADO, это довольно серьезное изменение для выполнения простой задачи.
CSV Split
В этой стратегии вы передаете CSVстрока в SQL, независимо от того, является ли она специальной или в качестве параметра хранимой процедуры.Строка обрабатывается табличной UDF, которая возвращает значения в виде таблицы с одним столбцом.
- Это была выигрышная стратегия, поскольку SQL-2000
- @ TimSchmelter дал отличный примерфункции разбиения CSV.
- Если вы Google, это сотни статей, исследующих каждый аспект от основ до анализа производительности на различных длинах строк.
Параметры с табличными значениями
В SQL 2008 могут быть определены пользовательские «типы таблиц».Как только тип таблицы определен, он может быть создан в ADO и передан в качестве параметра.
- Преимущество здесь в том, что он работает для большего количества сценариев, чем просто целочисленный список - он может поддерживать несколько столбцов
- со строгой типизацией
- возвращать обработку строк обратно дослой / язык, который хорош в этом.
- Это довольно большая тема, но Табличные параметры в SQL Server 2008 (ADO.NET) - хорошая отправная точка.