【问题标题】:SQL Query to get xml node values from nvarchar column is very slow从 nvarchar 列获取 xml 节点值的 SQL 查询非常慢
【发布时间】:2011-12-11 14:11:58
【问题描述】:

我有一个名为 tblAdmissions 的表,该表中的一列名为“ProgramInformation”。此列包含像

这样的 xml 字符串

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" num="1">

  <COURSE>reference_project</COURSE>

  <FEE>true</FEE>

</row>

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" num="2">
  <COURSE>RoomID</COURSE>
  <FEE>99</FEE>

</row>

我正在使用此查询通过交叉应用从这些列中获取值,而且速度非常慢。


使用 vDynamic AS ( 选择

            xmlProgramInformation = CAST(ProgramInformation AS XML)
        FROM 
            tblAdmission

        )

SELECT 

  t.p.query('COURSE' ).value('.', 'varchar(max)') AS Decipline, 
  t.p.query('FEE' ).value('.', 'varchar(max)') AS CourseFee 

FROM 
  vDynamic 
  CROSS apply xmlProgramInformation.nodes('/DOCUMENT/ROWS/row') AS t(p)

有没有其他方法可以让我的查询快速运行。

谢谢

【问题讨论】:

  • 任何人都知道一些更好的解决方案。

标签: xml vba find duplicate-removal xmlnode


【解决方案1】:

您可以尝试一些事情,从最容易实施到最困难:

  1. 如果您的所有数据都在 XML 中,则将 nvarchar 更改为 XML 列。我比较确定这不会对您的表现产生明显影响,但它是后续步骤的基础。

  2. 实现 XML 索引。上网查书了解详情

  3. 如果您查询的属性是固定的,那么您可能需要继续将它们分解为固定的表格式。 SQL Server 更喜欢 SQL; XML 和 XQuery 应该用于临时探索和/或变革性工作。

【讨论】:

  • 您好,感谢您的回复。我的数据不是基于 xml。我有一对多的关系,并且我想从一行中的详细信息表中获取数据,这就是我使用 xml 的原因。我的原始表没有 XML 列。正如您在上面看到的,课程和费用列来自具有 nvarchar 数据类型的明细表。我已经编写了一个视图,其中我从基于父表(1 到多个)的 xml 格式的详细表中获取了所有属性
猜你喜欢
  • 2011-11-15
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2018-10-18
  • 1970-01-01
相关资源
最近更新 更多