If my assumptions are correct and you want to list all ReportData elements in your XML document and want their children to be different columns, you can look something like this:
;WITH XMLNAMESPACES(DEFAULT 'http://ait.com/reportdata') SELECT [ReportId] = reportdata.item.value('(./ReportId)[1]', 'varchar(40)') , [DocId] = reportdata.item.value('(./DocId)[1]', 'varchar(40)') , [ReportName] = reportdata.item.value('(./ReportName)[1]', 'varchar(40)') , [DocType] = reportdata.item.value('(./DocType)[1]', 'varchar(40)') , [StatusId] = reportdata.item.value('(./StatusId)[1]', 'varchar(40)') , [AuthorId] = reportdata.item.value('(./AuthorId)[1]', 'varchar(40)') FROM @xVar.nodes('//ReportData') AS reportdata(item)
I need to work a bit on namespace declarations, but it seems to work for me ...
EDIT: modified my answer with a WITH XMLNAMESPACES clause, as Martin recommended. :)
source share