Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск в JSON как в строке / 6 сообщений из 6, страница 1 из 1
29.03.2019, 15:37
    #39793699
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в JSON как в строке
Всем привет! Есть очень сильно изменяющаяся структура 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
29.03.2019, 15:44
    #39793708
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в JSON как в строке
Для лучшего понимания, каким разнообразным может быть уровень вложенности элемента "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
29.03.2019, 17:21
    #39793795
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в JSON как в строке
...
Рейтинг: 0 / 0
30.03.2019, 13:57
    #39794041
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в JSON как в строке
Вроде бы вопрос упростился. Теперь есть такая 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
30.03.2019, 14:54
    #39794057
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в JSON как в строке
Код: sql
1.
2.
3.
4.
5.
select
 b.n.query('.')
from
 #XMLwithOpenXML a cross apply
 a.XMLdata.nodes('//*[@connection]') b(n);
...
Рейтинг: 0 / 0
30.03.2019, 16:51
    #39794080
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в JSON как в строке
Да. оно! Спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск в JSON как в строке / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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