Версия 8.1 от Alexandr Fokin на 2020/03/25 19:05

Последние авторы
1
2 **Задача:**
3 Имеется таблица с записями Таблица1 (При этом размеры таблицы не малы)
4 Имеется список ключей List1 (Кол-во элементов в списке превышает 500)
5
6 Необходимо отобрать из Таблица1 значения, у которых поле key попадает в список List1.
7
8 **Варианты реализации:**
9 1) Использование оператора IN, в параметрах у которого перечислены все значения из List1.
10 2) Созданием временной таблицы в рамках запроса, наполнение таблицы значениями из List1, выполнить join между временной таблицой и Таблица1
11 (!При этом одна операция INSERT может вставить не более 1000 строк и если элементов больше, то потребуется несколько операций)
12 Реализация происходит в рамках sql запросов ado.net, без хранимых процедур. Время, затрачиваемое на построение текста запроса, не учитывается.
13
14 {{html}}
15 <table style="height: 179px; width: 620px;">
16 <tbody>
17 <tr>
18 <td>Кол-во записей с в Таблица1</td>
19 <td>Кол-во элементов в List1</td>
20 <td>№</td>
21 <td>Время выполнения (мс)</td>
22 </tr>
23 <tr>
24 <td>20000</td>
25 <td>1000</td>
26 <td>1</td>
27 <td>3887</td>
28 </tr>
29 <tr>
30 <td>&nbsp;</td>
31 <td>&nbsp;</td>
32 <td>2</td>
33 <td>63</td>
34 </tr>
35 </tbody>
36 </table>
37 {{/html}}
38
39 Ссылки:
40 https://metanit.com/sql/sqlserver/10.4.php
41 https://metanit.com/sql/sqlserver/10.3.php
42 https://info-comp.ru/programmirovanie/567-table-variables-in-ms-sql-server.html
43 https://www.cyberforum.ru/ado-net/thread1948686.html