Чего вы пытаетесь достичь ??
В вашем текущем операторе select будут перечислены все элементы <T>
ниже <Tx>
- но только те - не узлы <C>
тоже - и выПохоже, вы хотите получить значения из обоих видов подузлов - правильно ??
Это даст вам все элементы из узлов <T>
- это то, что вы ищете?
SELECT
Tx.x.value('.', 'varchar(10)') AS [Column 1]
FROM @MyXml.nodes('Tx/T') Tx(x)
Это даст вам все элементы внутри узла <Tx>
, включая их «тип» (C или T) - это то, что вы ищете?
SELECT
ColumType = Tx.x.value('local-name(.)', 'varchar(10)'),
ColumnValue = Tx.x.value('.', 'varchar(10)')
FROM @MyXml.nodes('Tx/*') Tx(x)
Обновление: в качестве ресурсов для обучения использованию XQuery в SQL Server, я бы порекомендовал
Ваш XML не подходит для того, что вы пытаетесь сделать -нет ничего, что «объединяет» элементы T и C, которые, очевидно, принадлежат друг другу, поэтому XQuery действительно ничего не может сделать, чтобы проанализировать это так, как вы этого хотите.
Если у вас был XML-код, подобный следующему:
<Tx>
<Pair>
<T>....</T>
<C>....</C>
</Pair>
<Pair>
<T>....</T>
<C>....</C>
</Pair>
....
</Tx>
тогда вы можете получить список Tx/Pair
узлов и получить элементы T и C из этого фрагмента XML.Но прямо сейчас - все, что вы можете сделать, это проанализировать все 8 подузлов <Tx>
и отобразить их значения - это действительно все, что вы можете сделать