【发布时间】:2017-01-31 05:08:04
【问题描述】:
我有超过 500,000 个 XML 文件存储在一个 MS SQL 数据库中,例如下面的一个(为了节省问题的空间而对其进行了编辑)。
<?xml version="1.0"?>
<PROJECTS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<APPLICATION_ID>7000518</APPLICATION_ID>
<ACTIVITY>C06</ACTIVITY>
<ADMINISTERING_IC>RR</ADMINISTERING_IC>
<APPLICATION_TYPE>1</APPLICATION_TYPE>
<BUDGET_START>09/01/2009</BUDGET_START>
<BUDGET_END>09/30/2013</BUDGET_END>
<FULL_PROJECT_NUM>1C06RR020539-01A1</FULL_PROJECT_NUM>
<FY>2009</FY>
<ORG_STATE>CA</ORG_STATE>
<ORG_ZIPCODE>900952000</ORG_ZIPCODE>
<PIS>
<PI>
<PI_NAME>JONES,MARY</PI_NAME>
<PI_ID>9876543</PI_ID>
</PI>
<PI>
<PI_NAME>DOE, JOHN</PI_NAME>
<PI_ID>1234567</PI_ID>
</PI>
</PIS>
<PROJECT_TERMSX>
<TERM>Extramural Activities</TERM>
<TERM>Extramural Research Facilities Construction Project</TERM>
</PROJECT_TERMSX>
<PROJECT_TITLE>The Center for Oral/Research</PROJECT_TITLE>
<SUPPORT_YEAR>1</SUPPORT_YEAR>
</row>
</PROJECTS>
我可以使用以下方式搜索任何单个节点:
SELECT nref.value('(APPLICATION_ID)[1]', 'Int') APPLICATION_ID,
nref.value('(ACTIVITY)[1]', 'varchar(3)') ACTIVITY
FROM [XML_2010] cross apply XMLData.nodes('//PROJECTS/row') as R(nref)
WHERE nref.value('(CORE_PROJECT_NUM)[1]', 'varchar(25)') LIKE '%CA187342%'
但是我如何才能找到与所有将 DOE、JOHN 作为 PI(PIS 的子节点)的 XML 文件关联的数据?比如APPLICATION_ID和BUDGET_START等? 感谢您的帮助
【问题讨论】:
-
所有 XML 的结构都相同吗?您的代码看起来像是在使用 real XML 数据类型,但您的示例以
<?xml version="1.0"?>?这是存储为字符串(哪个列数据类型?)还是从文件中读取?您是否一直在寻找相同的信息进行过滤,或者您可能需要来自内部的任何信息?乍一看,我建议在索引侧列中写入一些值。也许把全部写到一张普通的桌子上? -
所有的 XML 文件都是相同的结构。数据类型为 XML。我将获得的包含大约 100K 记录的 XML 数据文件解析为单独的文件。如果有更好的方法,我愿意接受建议。我应该将所有内容解析为普通表吗?我希望它找到与 PI 关联的记录,然后将它们解析成表格。我不需要所有 100K 记录,但直到我搜索才知道哪些记录
标签: sql-server xml