如何在选择表单选择查询时跳过缺少的 XML 数据列值

时间:2021-03-18 22:07:09

标签: sql-server tsql xml-parsing cross-apply for-xml-path

我的查询返回:

<块引用>

Msg 9421,XML 解析:非法名称字符错误

我需要跳过下表中没有数据的行

SELECT
    ps.person_num,
    q1.r1.value(‘.’,’varchar(50)') as id,
    q2.r2.value(‘.’,'varchar(50)’)) as name
FROM
    persons ps
CROSS APPLY
    (SELECT CAST(SELECT CAST(sd.data AS xml)) AS p1(p1))
CROSS APPLY
    p1.p1.nodes(‘/person_data/person_id’) q1(r1)
CROSS APPLY
    p1.p1.nodes(‘/person_data/person_name’) q2(r2)

Persons 表有两列:

      Person_num    data (text column)
         1          <?xml version="1.0" encoding="UTF-8"?> <person_data>
                   <person_id>52<person_id/> <person_name>varna</person_name> </person_data >

         2         <?xml version="1.0" encoding="UTF-8"?><?>?</?>

         3         <?xml version="1.0" encoding="UTF-8"?> <person_data > <person_id>53<person_id/> 
                    <person_name>mala</person_name></ person_data >

         4         <?xml version="1.0" encoding="UTF-8"?> < person_data > <person_id>54<person_id/> 
                   <person_name>nayan</person_name> </person_data >

         5         <?xml version="1.0" encoding="UTF-8"?><?>?</?>

         6         <?xml version="1.0" encoding="UTF-8"?> < person_data > <person_id>55<person_id/>
                   <person_name>tara</person_name></person_data >

         7         <?xml version="1.0" encoding="UTF-8"?> < person_data > <person_id>56<person_id/> 
                   <person_name>janu</person_name> </person_data >

      
         

0 个答案:

没有答案
相关问题