Tenho alguns dados armazenados em uma tabela em formato XML:
<AccountTypes xmlns="">
<Id>1003</Id>
<Id>2</Id>
<Id>3</Id>
<Id>1004</Id>
<Id>1002</Id>
<Id>0</Id>
</AccountTypes>
Esses são dados herdados que anteriormente eram processados apenas no código C#, portanto, não podem ser alterados.
Agora preciso ler isso e processá-lo em um procedimento armazenado. Até agora tenho o seguinte código:
DECLARE @accountTypes XML
SELECT @accountTypes = DT.AccountTypes FROM dbo.DataTable AS DT
WHERE DT.Id = 1016
DECLARE @hdoc int
EXEC sys.sp_xml_preparedocument @hdoc OUTPUT, @accountTypes
SELECT *
FROM OPENXML (@hdoc, '/AccountTypes/Id')
WITH(
Id VARCHAR(10) 'Id'
)
EXEC sys.sp_xml_removedocument @hdoc
No entanto, a saída disso é apenas linhas de nulos:
Id
NULL
NULL
NULL
NULL
NULL
NULL
em vez dos valores de id que eu esperava.
Obtenho os mesmos resultados independentemente de incluir o colpattern
('Id') ou não ou se defino o flags
parâmetro no OPENXML
comando.
Existe algo que eu possa fazer com os dados em sua forma atual para obter os valores reais do XML?