powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск в JSON как в строке
6 сообщений из 6, страница 1 из 1
Поиск в JSON как в строке
    #39793699
Santa89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет! Есть очень сильно изменяющаяся структура JSON (разные уровни вложенности, названия, итд).
JSON такого вида:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
[{
              "-join": "left",
              "-type": "join",
              "clause": {
                "-type": "join",
                "expression": {
                  "-op": "AND",
                  "expression": [
                    {
                      "-op": "=",
                      "expression": [
                        {
                          "-op": "[tbl_2_3_EN].[Version_ID]"
                        },
                        {
                          "-op": "[tbl_2_2_EN].[Version_ID]"
                        }
                      ]
                    },
                    {
                      "-op": "=",
                      "expression": [
                        {
                          "-op": "[tbl_2_3_EN].[uda_3_54]"
                        },
                        {
                          "-op": "[tbl_2_2_EN].[ID]"
                        }
                      ]
                    }
                  ]
                }
              },
              "relation": [
                {
                  "-connection": "sqlserver.19z8ndd0q9wa081bnydlk0flgbi3",
                  "-name": "tbl_2_3_EN",
                  "-table": "[mdm].[tbl_2_3_EN]",
                  "-type": "table"
                },
                {
                  "-connection": "sqlserver.19z8ndd0q9wa081bnydlk0flgbi3",
                  "-name": "tbl_2_2_EN",
                  "-table": "[mdm].[tbl_2_2_EN]",
                  "-type": "table"
                }
              ]}]



Вопрос:
мне нужно найти все сочетания атрибутов "-connection","-name","-table","-type".
средствами парсинга JSON на SQL Server 2016 такого сделать вряд-ли получится, т.к. повторюсь - очень сильно изменяющаяся структура. Планирую делать через поиск в строке.

Т.е. на выходе должна получится табличка типа:

|-connection||-name||-table||-type|
|sqlserver.19z8ndd0q9wa081bnydlk0flgbi3||tbl_2_3_EN||[mdm].[tbl_2_2_EN]||table|
|sqlserver.19z8ndd0q9wa081bnydlk0flgbi3||tbl_2_2_EN||[mdm].[tbl_2_2_EN]||table|

Как это можно было бы сделать?
...
Рейтинг: 0 / 0
Поиск в JSON как в строке
    #39793708
Santa89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для лучшего понимания, каким разнообразным может быть уровень вложенности элемента "relation" привожу пример JSON сгенерённого для другого элемента данных:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
DECLARE @JSON VARCHAR(MAX) = 
'{
              "-join": "inner",
              "-type": "join",
              "clause": {
                "-type": "join",
                "expression": {
                  "-op": "AND",
                  "expression": [
                    {
                      "-op": "=",
                      "expression": [
                        {
                          "-op": "[region].[Version_ID]"
                        },
                        {
                          "-op": "[country].[Version_ID]"
                        }
                      ]
                    },
                    {
                      "-op": "=",
                      "expression": [
                        {
                          "-op": "[region].[uda_5_257]"
                        },
                        {
                          "-op": "[country].[ID]"
                        }
                      ]
                    }
                  ]
                }
              },
              "relation": [
                {
                  "-join": "inner",
                  "-type": "join",
                  "clause": {
                    "-type": "join",
                    "expression": {
                      "-op": "AND",
                      "expression": [
                        {
                          "-op": "=",
                          "expression": [
                            {
                              "-op": "[city].[Version_ID]"
                            },
                            {
                              "-op": "[region].[Version_ID]"
                            }
                          ]
                        },
                        {
                          "-op": "=",
                          "expression": [
                            {
                              "-op": "[city].[uda_6_258]"
                            },
                            {
                              "-op": "[region].[ID]"
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "relation": [
                    {
                      "-join": "inner",
                      "-type": "join",
                      "clause": {
                        "-type": "join",
                        "expression": {
                          "-op": "=",
                          "expression": [
                            {
                              "-op": "[MDS_Fact_Table_For_Hierarchies].[location_id]"
                            },
                            {
                              "-op": "[city].[ID]"
                            }
                          ]
                        }
                      },
                      "relation": [
                        {
                          "-connection": "sqlserver.0d73hc20uzjr801ezwenn1dpyfz1",
                          "-name": "MDS_Fact_Table_For_Hierarchies",
                          "-table": "[_del].[MDS_Fact_Table_For_Hierarchies]",
                          "-type": "table"
                        },
                        {
                          "-connection": "sqlserver.0d73hc20uzjr801ezwenn1dpyfz1",
                          "-name": "city",
                          "-table": "[mdm].[tbl_3_6_EN]",
                          "-type": "table"
                        }
                      ]
                    },
                    {
                      "-connection": "sqlserver.0d73hc20uzjr801ezwenn1dpyfz1",
                      "-name": "region",
                      "-table": "[mdm].[tbl_3_5_EN]",
                      "-type": "table"
                    }
                  ]
                },
                {
                  "-connection": "sqlserver.0d73hc20uzjr801ezwenn1dpyfz1",
                  "-name": "country",
                  "-table": "[mdm].[tbl_3_4_EN]",
                  "-type": "table"
                }
              ]
            }'

SELECT @JSON
...
Рейтинг: 0 / 0
Поиск в JSON как в строке
    #39793795
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поиск в JSON как в строке
    #39794041
Santa89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде бы вопрос упростился. Теперь есть такая XML:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
<relation join="inner" type="join">
  <clause type="join">
    <expression op="AND">
      <expression op="=">
        <expression op="[region].[Version_ID]" />
        <expression op="[country].[Version_ID]" />
      </expression>
      <expression op="=">
        <expression op="[region].[uda_5_257]" />
        <expression op="[country].[ID]" />
      </expression>
    </expression>
  </clause>
  <relation join="inner" type="join">
    <clause type="join">
      <expression op="AND">
        <expression op="=">
          <expression op="[city].[Version_ID]" />
          <expression op="[region].[Version_ID]" />
        </expression>
        <expression op="=">
          <expression op="[city].[uda_6_258]" />
          <expression op="[region].[ID]" />
        </expression>
      </expression>
    </clause>
    <relation join="inner" type="join">
      <clause type="join">
        <expression op="=">
          <expression op="[MDS_Fact_Table_For_Hierarchies].[location_id]" />
          <expression op="[city].[ID]" />
        </expression>
      </clause>
      <relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="MDS_Fact_Table_For_Hierarchies" table="[_del].[MDS_Fact_Table_For_Hierarchies]" type="table" />
      <relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="city" table="[mdm].[tbl_3_6_EN]" type="table" />
    </relation>
    <relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="region" table="[mdm].[tbl_3_5_EN]" type="table" />
  </relation>
  <relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="country" table="[mdm].[tbl_3_4_EN]" type="table" />
</relation>
<relation join="inner" type="join">
  <clause type="join">
    <expression op="AND">
      <expression op="=">
        <expression op="[city].[Version_ID]" />
        <expression op="[region].[Version_ID]" />
      </expression>
      <expression op="=">
        <expression op="[city].[uda_6_258]" />
        <expression op="[region].[ID]" />
      </expression>
    </expression>
  </clause>
  <relation join="inner" type="join">
    <clause type="join">
      <expression op="=">
        <expression op="[MDS_Fact_Table_For_Hierarchies].[location_id]" />
        <expression op="[city].[ID]" />
      </expression>
    </clause>
    <relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="MDS_Fact_Table_For_Hierarchies" table="[_del].[MDS_Fact_Table_For_Hierarchies]" type="table" />
    <relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="city" table="[mdm].[tbl_3_6_EN]" type="table" />
  </relation>
  <relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="region" table="[mdm].[tbl_3_5_EN]" type="table" />
</relation>
<relation join="inner" type="join">
  <clause type="join">
    <expression op="=">
      <expression op="[MDS_Fact_Table_For_Hierarchies].[location_id]" />
      <expression op="[city].[ID]" />
    </expression>
  </clause>
  <relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="MDS_Fact_Table_For_Hierarchies" table="[_del].[MDS_Fact_Table_For_Hierarchies]" type="table" />
  <relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="city" table="[mdm].[tbl_3_6_EN]" type="table" />
</relation>
<relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="MDS_Fact_Table_For_Hierarchies" table="[_del].[MDS_Fact_Table_For_Hierarchies]" type="table" />
<relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="city" table="[mdm].[tbl_3_6_EN]" type="table" />
<relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="region" table="[mdm].[tbl_3_5_EN]" type="table" />
<relation connection="sqlserver.0d73hc20uzjr801ezwenn1dpyfz1" name="country" table="[mdm].[tbl_3_4_EN]" type="table" />
<relation join="left" type="join">
  <clause type="join">
    <expression op="AND">
      <expression op="=">
        <expression op="[tbl_2_3_EN].[Version_ID]" />
        <expression op="[tbl_2_2_EN].[Version_ID]" />
      </expression>
      <expression op="=">
        <expression op="[tbl_2_3_EN].[uda_3_54]" />
        <expression op="[tbl_2_2_EN].[ID]" />
      </expression>
    </expression>
  </clause>
  <relation connection="sqlserver.19z8ndd0q9wa081bnydlk0flgbi3" name="tbl_2_3_EN" table="[mdm].[tbl_2_3_EN]" type="table" />
  <relation connection="sqlserver.19z8ndd0q9wa081bnydlk0flgbi3" name="tbl_2_2_EN" table="[mdm].[tbl_2_2_EN]" type="table" />
</relation>
<relation connection="sqlserver.19z8ndd0q9wa081bnydlk0flgbi3" name="tbl_2_3_EN" table="[mdm].[tbl_2_3_EN]" type="table" />
<relation connection="sqlserver.19z8ndd0q9wa081bnydlk0flgbi3" name="tbl_2_2_EN" table="[mdm].[tbl_2_2_EN]" type="table" />



Нужно вытащить из неё все тэги у которых есть атрибут Connection, там дальше уже просто будет.
Но вот вопрос как их вытащить?

Делаю:

Код: sql
1.
2.
3.
4.
SELECT
	XMLData.query('//relation')
	FROM #XMLwithOpenXML
	WHERE XMLData.exist('/connection') <> 0



не получается...
...
Рейтинг: 0 / 0
Поиск в JSON как в строке
    #39794057
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
select
 b.n.query('.')
from
 #XMLwithOpenXML a cross apply
 a.XMLdata.nodes('//*[@connection]') b(n);
...
Рейтинг: 0 / 0
Поиск в JSON как в строке
    #39794080
Santa89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. оно! Спасибо
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск в JSON как в строке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]