Прежде всего, я бы использовал SQL Server 2005 XQuery поверх OPENXML - мне кажется, проще и чище.
Во-вторых, не совсем ясно, какие элементы или атрибуты вы хотите извлечь ....
В-третьих: вы игнорируете пространства имен XML, поэтому ничего не работает ... они существуют по какой-то причине, и вам нужно обратить на них внимание!
Итак, я попробовал что-то вроде этого:
DECLARE @input XML = '.....'
;WITH XMLNAMESPACES('urn:schemas-microsoft-com:rowset' AS rs, '#RowsetSchema' AS z)
SELECT
Nodes.Attr.value('(@c0)[1]', 'INT') AS 'HomeroomTeacher',
Nodes.Attr.value('(@c1)[1]', 'INT') AS 'HomeroomNumber',
Nodes.Attr.value('(@c2)[1]', 'INT') AS 'EntityID'
FROM
@input.nodes('/xml/rs:data/z:row') AS NOdes(Attr)
и я получаю вывод:
HomeroomTeacher HomeroomNumber EntityID
22943 101 55
22929 102 55
22854 103 55
22908 104 55
22881 105 55
Возможно, это еще не совсем то, что вы ищете, но это может быть отправной точкой!
Я сделал:
- определяет соответствующие пространства имен XML
rs:
и z:
, используя WITH XMLNAMESPACES
construct
- создал «псевдотаблица»
Nodes
с псевдостолбцом Attr
, который в основном имеет одну строку XML для каждого элемента, соответствующего этому выражению XPath
- Затем я вхожу в эти строки в псевдотаблице и могу извлечь нужные мне биты информации