T-Sql xml query with namespace

前端 未结 3 543
慢半拍i
慢半拍i 2020-12-11 03:13

This is a follow up question to

T-Sql xml query

If I add a namespace to xml data, nothing is returned again.

DECLARE @xVar XML
SET @xVar = 
         


        
3条回答
  •  清歌不尽
    2020-12-11 03:53

    If my assumptions are correct and you want to list ALL ReportData elements in your XML document and want their child elements as different columns, you could look at 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'll need to look at cleaning up the namespace declarations a bit, but it seems to work for me...

    EDIT: Amended my answer with the WITH XMLNAMESPACES clause as recommended by Martin. :)

提交回复
热议问题