m0_70930886 2024-01-30 10:14 采纳率: 0%
浏览 28
已结题

sql 查询解释XML数据列中的表格行。

请教 sql 查询解释XML数据列中的表格行。
如何直接查询查询或者通过存储把SQL表中的列及XML表中的列同时查询出来。
表结构如下:按日期查询所有表中所有XML列中的所有表格内容。XML不同的列有不同的ID.

img

XML代码可以参考这个连接(字数有限制没办法发上来)麻烦各位可以提供一个完整可以直接用的代码。谢谢。
https://bbs.csdn.net/topics/618018436?utm_source=bbs_home_page_8

下面图片是我想要的效果(但我只能读到第一行,没办法通过ID,把所有XML行读出来。需要把所有XML行读出来)

img

下面这是我读的代码

select blhid,b.blh,brxm 姓名,bldata.value('(//Text)[22]', 'nvarchar(max)'),bldata.value('(//Text)[23]', 'nvarchar(max)'),bldata.value('(//Text)[24]', 'nvarchar(max)'),bldata.value('(//Text)[25]', 'nvarchar(max)')
,bldata.value('(//Text)[26]', 'nvarchar(max)'),bldata.value('(//Text)[27]', 'nvarchar(max)'),bldata.value('(//Text)[28]', 'nvarchar(max)'),bldata.value('(//Text)[29]', 'nvarchar(max)'),bldata.value('(//Text)[30]', 'nvarchar(max)')
,bldata.value('(//Text)[31]', 'nvarchar(max)'),bldata.value('(//Text)[32]', 'nvarchar(max)'),bldata.value('(//Text)[33]', 'nvarchar(max)'),bldata.value('(//Text) [34]', 'nvarchar(max)')
 FROM   EMR999ADV.[dbo].[tBRBLList] a LEFT JOIN EMR999ADV.[dbo].tBRZL b on a.blhid=b.sid 
WHERE  blxmid='2331'  and b.BLH='0000202'

WHERE b.BLH='0000202' 只是为了测试时缩小数据范围的临时条件。实际需要以日期为条件查询。

  • 写回答

17条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-01-30 10:16
    关注

    引自免费微信小程序:皆我百晓生

    在SQL Server中,处理XML数据类型列的内容通常需要使用T-SQL的内置XML方法。您提到的场景是查询一个包含XML列(bldata)的表,并从中提取特定信息。由于XML结构没有提供,我将基于通用情况演示如何查询XML列中的内容。

    假设您的XML文档遵循某种模式,比如每个XML文档都包含多个<row>元素,每个元素下有姓名(name)、日期(date)等子元素,您可以按照以下方式查询:

    DECLARE @xml XML = N'
    <root>
      <row>
        <name>袁远生</name>
        <date>2022-09-13 09:22:30.697</date>
      </row>
      <!-- 其他行... -->
    </root>';
    
    SELECT 
        a.blhid,
        a.blh,
        b.value('(name/text())[1]', 'varchar(50)') AS 姓名,
        b.value('(date/text())[1]', 'datetime') AS 日期,
        a.bldata
    FROM EMR999ADV.dbo.tBRBLList a
    JOIN EMR999ADV.dbo.tBRZL b ON a.blhid = b.sid
    WHERE a.blxmid = 2331 AND b.BLH = '0000202'
    AND a.bldata.exist('//row') = 1;
    
    -- 对于XML列的解析
    CROSS APPLY a.bldata.nodes('//row') AS XTbl(b);
    

    注意,上述代码片段首先定义了一个示例XML变量(@xml),在实际应用中,您应该直接引用表中的XML列(如a.bldata)。nodes()函数用于将XML拆分为行集,然后通过value()函数从每行中提取指定元素的文本值。

    如果您能提供具体的XML结构示例或说明,我可以给出更精确的查询语句。不过,请确保根据实际情况调整上述代码中的XPath表达式以匹配您的XML节点路径。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月31日
  • 修改了问题 1月30日
  • 修改了问题 1月30日
  • 修改了问题 1月30日
  • 展开全部