У меня есть приложение, в котором пользователи должны предоставить какую-то информацию для запроса. Одним из полей ввода является конкретное имя документа, которое существует в другой базе данных. Нет связи между базой данных, используемой в приложении, и базой данных для имени документа. Это означает, что могут быть введены неправильные имена документов.
Теперь я хочу сделать возможным сделать обзор всех запросов, которые не имеют правильного имени документа, на основе какого-либо фильтра.
Допустим, пользователь ищет некоторые запросы с выбранным фильтром. Найдено 80 000 запросов. Из этих 80 000 запросов только действительные номера документов должны быть показаны только.
Есть 2 WebApi. Первый WebApi для самого приложения. Другой для взаимодействия с базой данных de document.
Мой вопрос: есть ли быстрый способ вернуть только запросы с действительным именем документа, работающие с этими двумя WebApi? Я думаю, что это больше вопрос о том, как присоединить список строк к другой таблице базы данных, существующей в другом WebApi.
Что я пробовал до сих пор:
Приложение WebApi:
- Получение запросов на фильтр
- Получение списка всех действительных номеров документов путем передачи всех номеров документов (myStringList) запросов во второе WebApi
- Внутреннее присоединениесписок запросов с номерами документов.
Это работает достаточно хорошо для небольшого количества запросов. В самом приложении эта проблема решается путем работы с нумерацией страниц. Но функция экспорта в Excel требует загрузки всех данных без нумерации страниц.
Document WebApi:
Это некоторые методы sql, которые я пытался использовать. myStringList = список всех номеров документов из запросов.
Первый метод занимает более одной минуты для выполнения 80 000 номеров документов. Второй метод занимает 80 секунд для 80 000 номеров документов.
var commaSeparatedList = string.Join(",", myStringList.Select(item => "('" + item + "')"));
string sqlCommand =
" select DISTINCT [Name] " +
" from( " +
" SELECT * FROM(VALUES " + commaSeparatedList + ") as x(ID) " +
" ) x " +
" left join Table1 on x.ID = Table1 .Name";
var commaSeparatedList = string.Join(",", myStringList);
string sqlCommand =
"DECLARE @data NVARCHAR(MAX), " +
" @delimiter NVARCHAR(5)" +
" SELECT @data = '" + commaSeparatedList + "' " +
" set @delimiter = ','" +
" DECLARE @textXML XML;" +
" SELECT @textXML = CAST('<d>' + REPLACE(@data, @delimiter, '</d><d>') + '</d>' AS XML);" +
" declare @temp table(num nvarchar(max))" +
" insert into @temp" +
" SELECT T.split.value('.', 'nvarchar(max)') AS data" +
" FROM @textXML.nodes('/d') T(split)" +
" Select DISTINCT [Name] " +
" FROM Table1 inner join @temp as x on x.num = Table1.[Name] ";