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?
Id
está procurando um sub elemento dos'/AccountTypes/Id'
nós que é chamadoId
ou seja, corresponderia a algo em
Você pode usar
Existe uma maneira alternativa de obter os dados:
Isso produz os mesmos resultados e, como os dados que tenho são muito pequenos, são executados praticamente ao mesmo tempo. Pode haver diferenças entre as consultas quando executadas em XML maior.