Обязательный пустой список или нулевое значение к табличному параметру на хранимой процедуре (.NET)

Я создал хранимую процедуру, которая берет табличный параметр, который является таблицей с отдельным столбцом интервала типа. Идея состоит в том, чтобы просто передать список идентификаторов в процедуру хранилища и позволить SP работать с данными. Однако в случае, где нет никаких данных для передачи в, я встречаюсь с проблемами (вещи работают правильно, когда у меня есть данные). Я преобразовываю Список в IEnumerable и связываю это с табличным параметром для SP. Я попытался связать пустой Список, который привел к ошибке

Система. ArgumentException: в перечислении SqlDataRecord нет никаких записей. Для отправки табличного параметра без строк используйте нулевую ссылку для значения вместо этого.

Я затем пытался связать нулевое значение (который я думал, был тем, что вышеупомянутое сообщение достигало), но который только привел к другому сообщению об ошибке

Система. NotSupportedException: значение DBNull для параметра '@MainItemIdList' не поддерживается. Табличные параметры не могут быть DBNull.

Не кажется, что можно объявить табличный параметр как nullable в объявлении SP. Каков корректный метод для привязки пустого списка к в табличном параметре?

59
задан 3 September 2010 в 01:22

1 ответ

Не передача значения делает работа, но не в случае, где у меня было несколько параметров, передаваемых по значению таблицы для передачи в процедуру. То, как я решил его, должно было указать значение 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 , где я нашел решение для этого.

3
ответ дан 1 November 2019 в 12:36

Другие вопросы по тегам:

Похожие вопросы: