Предложение запроса WHERE IN не работает

В запросе SQL мы используем предложение WHERE IN для фильтрации данных. Когда я передаю 35000 полей в предложении WHERE IN, ExecuteNonQuery бросает

Ссылка на объект не настроена на исключение экземпляра

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

Если я уменьшил количество с 35000 до 25000, SQL-запрос работает нормально. Пожалуйста помоги.

SELECT * FROM COUNTRY WHERE CountryID in ('1','2',......'35000')

Я также пытался использовать временную таблицу в SQL, произошла такая же ошибка.

IF OBJECT_ID('tempdb..#temp)IS NOT NULL DROP #TEMP 
CREATE TABLE #TEMP
( CountryID int NULL)
INSERT INTO #TEMP VALUES ('1')
.
.
.
INSERT INTO #TEMP VALUES('10')

SELECT * FROM COUNTRY WHERE CountryID IN(SELECT CountryID from #temp)

Ошибка нулевой ссылки на объект не является проблемой. Как я могу преодолеть проблему с предложением Where In в запросе sql. Какое возможное решение, чтобы избежать предложения Where in в запросе sql.

Пожалуйста помоги. Спасибо.


person Cegone    schedule 07.04.2016    source источник
comment
Какой продукт dbms вы используете?   -  person jarlh    schedule 07.04.2016
comment
comment
Покажите свой код позади   -  person Jaydip Jadhav    schedule 07.04.2016
comment
Если CountryID являются целыми числами, почему вы помещаете их в свой IN в виде строк?   -  person Steve    schedule 07.04.2016
comment
OT, во всем мире всего около 200 стран...   -  person jarlh    schedule 07.04.2016
comment
@Steve Можем ли мы избежать исключения, когда мы используем CountryID как целое число в WHERE IN?   -  person Cegone    schedule 07.04.2016
comment
35000 элементов в IN — это много данных. В любом случае, если поле целочисленное, то передача строки будет лишь возможным источником неприятностей. Просто попробуйте   -  person Steve    schedule 07.04.2016
comment
@jarlh: я поставил countryID просто для примера .. :) но в проекте мы используем разные имена ключей.   -  person Cegone    schedule 07.04.2016
comment
@jarlh: Это не повторяющийся вопрос, верно?   -  person Cegone    schedule 07.04.2016
comment
Вы до сих пор не сказали нам, какие СУБД вы используете.   -  person jarlh    schedule 07.04.2016
comment
@jarlh из кода его временной таблицы я предполагаю, что это SQL Server. В любом случае Cegone должен уточнить это, а также сообщить нам, какую версию dbms он использует.   -  person Alex B.    schedule 07.04.2016
comment
@jarlh: мы используем RDMS, SQL Server 2008 R2.   -  person Cegone    schedule 07.04.2016
comment
@Steve: Спасибо за совет. Это работает, когда я передаю ConutryID как целое число без одинарных кавычек. Я мог получить более 35000 предметов.   -  person Cegone    schedule 08.04.2016


Ответы (2)


Вместо этого используйте соединение, это должно работать

SELECT * FROM COUNTRY c INNER JOIN #temp t on c.CountryId=t.CountryId
person Pawan Nogariya    schedule 07.04.2016
comment
Если это сработало для вас, пожалуйста, отметьте ответ как правильный :) - person Pawan Nogariya; 25.04.2016

Почему бы просто не использовать между?

SELECT * FROM COUNTRY WHERE CountryID between 1 and 10

person crimson589    schedule 07.04.2016
comment
Может есть пробелы? - person jarlh; 07.04.2016
comment
@jarlh Я не знаю, как он получает, какой идентификатор выбрать, но вы можете использовать OR, SELECT * FROM COUNTRY WHERE CountryID between 1 and 4 or CountryID between 8 and 10 - person crimson589; 07.04.2016
comment
@Cegone А.. хорошо, извини. Ваш первый пример заставил меня подумать, что это всего лишь 1-35000 - person crimson589; 07.04.2016