Значение запроса из элемента данных XML - PullRequest
0 голосов
/ 09 октября 2019

У меня есть SQL-запрос, который возвращает данные из столбца. Однако данные в столбце представлены в формате XML. Мне нужно значение внутри элемента значения. Как я могу это сделать?

Пожалуйста, посмотрите мой ниже SQL-запрос.

SELECT 
    A.[business_line]
FROM
    [EU_OTH_REG].[dbo].[TBL_EU_OTH_TXN_REG_RSDS] A
INNER JOIN
    [EU_OTH_REG].[dbo].[TBL_EU_OTH_REG_MST_LOOKUP] B ON B.code = A.product_substance_type

Выходные данные для этого запроса

<collection><object parentid="ce57cc75-3966-478f-bf25-5e3abf716f96" parenttype="Object"><fields><field name="code"><value>BL2</value></field></fields></object></collection>

Я хочу значение BL2из этого. Данные находятся внутри элемента value. Может кто-нибудь помочь, как это сделать? Я пытался использовать материал, но не смог получить значение.

1 Ответ

2 голосов
/ 09 октября 2019

XML.value() выполняет следующие действия:

declare @Test xml = '<collection><object parentid="ce57cc75-3966-478f-bf25-5e3abf716f96" parenttype="Object"><fields><field name="code"><value>BL2</value></field></fields></object></collection>';

select @Test.value('(/collection/object/fields/field/value)[1]', 'varchar(3)' )

Возвращает:

BL2

Так что добавьте это к вашему запросу:

select A.[business_line].value('(/collection/object/fields/field/value)[1]', 'varchar(3)'
from [EU_OTH_REG].[dbo].[TBL_EU_OTH_TXN_REG_RSDS] A
inner join [EU_OTH_REG].[dbo].[TBL_EU_OTH_REG_MST_LOOKUP] B
    on B.code = A.product_substance_type

Поскольку вы указали, что A.[business_line] не относится к типу данных XML, просто преобразуйте его перед вызовом value:

convert(xml, A.[business_line]).value

Примечание: я предположил, что в нем всего 3 символарезультат, т.е. varchar(3), но если не отрегулировать под костюм.

...