Редактировал(а) Alexandr Fokin 2023/12/16 14:13

От версии 1.1
отредактировано Alexandr Fokin
на 2020/03/23 11:22
Изменить комментарий: К данной версии нет комментариев
К версии 14.3
отредактировано Alexandr Fokin
на 2020/03/28 16:33
Изменить комментарий: Редактировать комментарий

Сводка

Подробности

Свойства страницы
Название
... ... @@ -1,1 +1,1 @@
1 -Поиск в таблице по списку
1 +Поиск в таблице по списку ключей
Теги
... ... @@ -1,0 +1,1 @@
1 +sql|Тестирование
Содержимое
... ... @@ -1,0 +1,76 @@
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 +3) Использование xml переменной, данные из которой используются для операции join с Таблица1.
14 +
15 +{{html}}
16 +<table style="height: 179px; width: 620px;">
17 +<tbody>
18 + <tr>
19 + <td>Кол-во записей с в Таблица1</td>
20 + <td>Кол-во элементов в List1</td>
21 + <td>Кол-во запусков</td>
22 + <td>№</td>
23 + <td>Среднее время выполнения (мс)</td>
24 + </tr>
25 + <tr>
26 + <td>20000</td>
27 + <td>1000</td>
28 + <td>50</td>
29 + <td>1</td>
30 + <td>97</td>
31 + </tr>
32 + <tr>
33 + <td>&nbsp;</td>
34 + <td>&nbsp;</td>
35 + <td>&nbsp;</td>
36 + <td>2</td>
37 + <td>70</td>
38 + </tr>
39 + <tr>
40 + <td>&nbsp;</td>
41 + <td>&nbsp;</td>
42 + <td>&nbsp;</td>
43 + <td>3</td>
44 + <td>34</td>
45 + </tr>
46 +
47 + <tr>
48 + <td>&nbsp;</td>
49 + <td>2000</td>
50 + <td>50</td>
51 + <td>1</td>
52 + <td>202</td>
53 + </tr>
54 + <tr>
55 + <td>&nbsp;</td>
56 + <td>&nbsp;</td>
57 + <td>&nbsp;</td>
58 + <td>2</td>
59 + <td>126</td>
60 + </tr>
61 + <tr>
62 + <td>&nbsp;</td>
63 + <td>&nbsp;</td>
64 + <td>&nbsp;</td>
65 + <td>3</td>
66 + <td>60</td>
67 + </tr>
68 +</tbody>
69 +</table>
70 +{{/html}}
71 +
72 +Ссылки:
73 +https://metanit.com/sql/sqlserver/10.4.php
74 +https://metanit.com/sql/sqlserver/10.3.php
75 +https://info-comp.ru/programmirovanie/567-table-variables-in-ms-sql-server.html
76 +https://www.cyberforum.ru/ado-net/thread1948686.html
XWiki.XWikiComments[0]
Автор
... ... @@ -1,0 +1,1 @@
1 +XWiki.cccc1808
Комментарий
... ... @@ -1,0 +1,45 @@
1 +1)
2 +select *
3 +from dbo.MainEntities
4 +where I in (1000,1001,1002 ...)
5 +
6 +2)
7 +DROP TABLE IF EXISTS #TmpData
8 +
9 +CREATE TABLE #TmpData
10 +(ID INT)
11 +
12 +
13 +INSERT INTO #TmpData
14 +VALUES (1000), (1001), (1002), ...
15 +
16 +...
17 +
18 +SELECT *
19 +FROM #TmpData td
20 +JOIN dbo.MainEntities me on td.ID = me.I
21 +
22 +DROP TABLE IF EXISTS #TmpData
23 +
24 +3)
25 +
26 +
27 +Declare @idList xml = '<ArrayOfInt>
28 + <int>1000</int>
29 + <int>1001</int>
30 + <int>1002</int>
31 + <int>1003</int>
32 + <int>1004</int>
33 + <int>1005</int>
34 + <int>1006</int>
35 + <int>1007</int>
36 + <int>1008</int>
37 + <int>1009</int>
38 + ...
39 +</ArrayOfInt>'
40 +
41 +Select
42 + me.*
43 +From @idList.nodes('/ArrayOfInt/int') AS idList(id)
44 + JOIN dbo.MainEntities me on idList.id.value('.', 'int') = me.I
45 +
Дата
... ... @@ -1,0 +1,1 @@
1 +2020-03-25 11:50:46.920