SQL SELECT WHERE значение IN («Огромный список значений») - PullRequest
0 голосов
/ 08 ноября 2011

Примечание. Приложение C # 3.5 вызывает БД SQL Server 2005 на удаленном сервере.

Я разрабатываю двухэтапный процесс.

1) Я ищу в службе индексирования Windows список файлов, содержащих данное слово, например «Боб».

2) Затем мне нужно получить список строк из таблицы DOCUMENT в базе данных SQL, передав список имен файлов из службы индексирования.

В данный момент я получаю список из службы индексирования И все строки из таблицы DOCUMENT, затем фильтрую их в коде. Это не практично, поскольку существует более 10 000 документов и база данных находится через брандмауэр.

Я подумал о создании запроса, например:

ВЫБРАТЬ DocName ИЗ Документов, ГДЕ DocName IN ({список файлов из службы индексирования})

... но, учитывая, что список файлов может быть тысяч, он не будет работать.

Итак, что я могу сделать лучше всего? Я не хочу запрашивать БД для всех 10 000+ строк и передавать их обратно через брандмауэр (это занимает 10 минут). Мне как-то нужно передать список имен файлов, извлеченных из службы индексирования.

Как будет работать linq в этом сценарии?

Любой совет с благодарностью.

Ответы [ 3 ]

3 голосов
/ 08 ноября 2011

Если бы у вас был SQL Server 2008, вы могли бы использовать Таблица значений параметров , но для 2005 года нет ничего более элегантного.

Самое простое решение, о котором я могу подумать:

  • Создать таблицу в базе данных
  • Массовая вставка результатов вашей службы индексирования в таблицу
  • Присоедините ваш запрос к этой таблице, чтобы отфильтровать результаты
  • Извлечение сохраненных результатов

Это не очень хорошее решение, но я не знаю, существует ли отличное решение - именно поэтому были созданы TVP.

0 голосов
/ 10 ноября 2011

Я выбрал решение, похожее на то, что упоминал Базз.

Я настроил ночную операцию для копирования необходимых полей из базы данных и установки метатегов в файлах документов (PDF). Затем метаданные можно использовать в службе индексирования; o)

Это оказалось хорошим решением для этого случая, но в противном случае то, что сказал Халлензил, было бы лучшим вариантом, хотя и болезненным для Sql Server 2005.

0 голосов
/ 08 ноября 2011

Вы можете оценить различные решения для этого вида "массивной" операции, возможно, нет необходимости использовать linq. Например, попробуйте реализовать хранимую процедуру на SQL Server, которая получает на вход список имен файлов и возвращает список документов.

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