Я создал хранимую процедуру, которая берет табличный параметр, который является таблицей с отдельным столбцом интервала типа. Идея состоит в том, чтобы просто передать список идентификаторов в процедуру хранилища и позволить SP работать с данными. Однако в случае, где нет никаких данных для передачи в, я встречаюсь с проблемами (вещи работают правильно, когда у меня есть данные). Я преобразовываю Список в IEnumerable и связываю это с табличным параметром для SP. Я попытался связать пустой Список, который привел к ошибке
Система. ArgumentException: в перечислении SqlDataRecord нет никаких записей. Для отправки табличного параметра без строк используйте нулевую ссылку для значения вместо этого.
Я затем пытался связать нулевое значение (который я думал, был тем, что вышеупомянутое сообщение достигало), но который только привел к другому сообщению об ошибке
Система. NotSupportedException: значение DBNull для параметра '@MainItemIdList' не поддерживается. Табличные параметры не могут быть DBNull.
Не кажется, что можно объявить табличный параметр как nullable в объявлении SP. Каков корректный метод для привязки пустого списка к в табличном параметре?
Не передача значения делает работа, но не в случае, где у меня было несколько параметров, передаваемых по значению таблицы для передачи в процедуру. То, как я решил его, должно было указать значение DEFAULT
в моей строке запроса. Например,
string sqlQuery = "[dbo].[GetOrderData] @QueueId";
if (OrderIdList.Any())
{
sqlQuery = sqlQuery + ", @OrderIdList";
}
else
{
sqlQuery = sqlQuery + ", DEFAULT";
}
if (RegionIdList.Any())
{
sqlQuery = sqlQuery + ", @RegionIdList";
}
else
{
sqlQuery = sqlQuery + ", DEFAULT";
}
Благодарность http://www.sommarskog.se/arrays-in-sql-2008.html#Invoking , где я нашел решение для этого.