0

我有一张名为 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)

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

谢谢

4

1 回答 1

0

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

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

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

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

于 2011-10-20T13:25:04.540 回答