Сначала определите ваш @XML
как тип XML
:
DECLARE @XML XML;
Затем: вам нужно определить соответствующие задействованные XML пространства имен!
Попробуйте этот фрагмент кода:
-- define XML namespaces!
;WITH XMLNAMESPACES(DEFAULT 'http://www.w3.org/2005/Atom',
'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata' AS m,
'http://schemas.microsoft.com/ado/2007/08/dataservices' AS d)
SELECT
b.value('(d:Id)[1]', 'varchar(28)') as d_id,
b.value('(d:BC_30YEAR)[1]', 'decimal(20,2)') as d_BC_30YEAR
FROM
@XML.nodes('feed/entry/content/m:properties') as a(b)
Это возвращает следующее значение:
введите описание изображения здесь
Исправления, которые я сделал:
FROM @XML.nodes('feed/entry/content type/m:properties/') as a(b)
^^^^^^^^^^^^
Неверное имя узла - это узел <content>
(не «тип содержимого») - type
- это просто атрибут на node, здесь нет никакого отношения к этому XPath.
SELECT b.value('@d:Id', 'varchar(28)') as d_id
^^^^^^
Вы действительно хотите выбрать XML элемент (node) d:Id
- не атрибут - @
в @d:Id
обозначает атрибут!
b.value('@d:BC_30YEAR', 'double') as d_BC_30YEAR
^^^^^^^^^
Вам необходимо использовать правильный тип данных T- SQL - например, decimal(20,2)
- здесь не "double" ....