Попробуйте что-то вроде этого:
SELECT
TBL.SParam.value('(.)[1]', 'varchar(50)')
FROM
@xmldoc.nodes('/NewDataSet/Table1/Sharedparam') AS TBL(SParam)
Дает мне вывод:
(No column name)
shared
Hey
Обновление: , если вы хотите получить все элементы XMLи их значения внутри элементов <Table1>
, вы можете использовать этот XQuery:
SELECT
TBL.SParam.value('local-name(.)[1]', 'varchar(50)') 'Attribute',
TBL.SParam.value('(.)[1]', 'varchar(50)') 'Value'
FROM
@xmldoc.nodes('/NewDataSet/Table1/*') AS TBL(SParam)
, который выводит:
Attribute Value
Sharedparam shared
Antoher sahre
RandomParam2 Good stuff
MoreParam and more
ResultsParam 2
Sharedparam Hey
Antoher what
RandomParam2 do you
MoreParam think
ResultsParam 2
Обновление № 2: , чтобы получитьДля значений первого <Table1>
и второго <Table1>
XML-узла рядом друг с другом необходимо выполнить два вызова .nodes()
- один раз получить первый узел, а второй - второй.Это становится немного странно, особенно если вы хотите расширить это еще больше - и производительность будет ужасной - но это работает: -)
SELECT
TBL.SParam.value('local-name(.)[1]', 'varchar(50)') 'Attribute',
TBL.SParam.value('(.)[1]', 'varchar(50)') 'Value 1',
TBL2.SParam2.value('(.)[1]', 'varchar(50)') 'Value 2'
FROM
@xmldoc.nodes('/NewDataSet/Table1[1]/*') AS TBL(SParam)
INNER JOIN
@xmldoc.nodes('/NewDataSet/Table1[2]/*') AS TBL2(SParam2) ON TBL.SParam.value('local-name(.)[1]', 'varchar(50)') = TBL2.SParam2.value('local-name(.)[1]', 'varchar(50)')
Дает вывод:
Attribute Value 1 Value 2
Sharedparam shared Hey
ResultsParam 2 2
RandomParam2 Good stuff do you
Antoher sahre what
MoreParam and more think