Фон У меня есть столбец XML в моей таблице SQL (с использованием SQL Server). Каждый узел имеет разное количество метаданных. Например, в приведенном ниже примере Шаг № 1 содержит единственное "Нет" в качестве метаданных, в то время как шаг № 2 дополнительно содержит RBuffer.
<Step No="1" >Step Number 1</Step>
<Step No="2" RBuffer="6000">Step Number 2</Step>
<Step No="3" Macro="5">Step Number 3</Step>
Ожидаемый Результат
Я хотел бы динамически извлекать эти метаданные, одновременно извлекая значение. В приведенном выше примере это будет выглядеть как приведенная ниже таблица. Важно отметить, что не должно иметь значения, сколько существует тегов метаданных, я хочу, чтобы он прошел через все из них. Некоторые из моих данных имеют более 10 тегов.
Узел | Шаг | Клавиша | Ценность |
---|---|---|---|
Шаг | 1 | Ценность | Шаг № 1 |
Шаг | 2 | RBuffer | 6000 |
Шаг | 2 | Ценность | Шаг № 2 |
Шаг | 3 | Макрос | 5 |
Шаг | 3 | Ценность | Шаг № 3 |
Работайте до сих пор
До сих пор мне удавалось извлекать метаданные статическим способом:
SELECT o.value('@No', 'varchar(32)') [Step]
,o.value('@Macro', 'varchar(32)') [Macro]
,o.value('@RBuffer', 'varchar(32)') [RBuffer]
,o.value('(text())[1]', 'varchar(32)') [Action]
FROM [dbo].[dw_mrd_vss_rundetail_stg] S
CROSS APPLY S.[rundata_detail].nodes('Step') xmlData(o)
Что дает следующую таблицу:
Шаг | Макрос | RBuffer | Экшен |
---|---|---|---|
1 | нулевой | нулевой | Шаг № 1 |
2 | нулевой | 6000 | Шаг № 2 |
3 | 5 | нулевой | Шаг № 3 |
Но я должен явно вызывать каждое значение, а создание столбцов таким образом не масштабируется. Любая помощь будет признательна. Я относительно новичок в такого рода обработке данных в SQL, поэтому объяснения кода были бы полезны.