【发布时间】:2010-11-05 16:06:08
【问题描述】:
我一直在使用以下代码将整个 XML 文件导入具有 XML 数据类型的临时表
INSERT
INTO import.XMLCompanyDetail
(
XMLData
)
SELECT BulkColumn AS XMLData
FROM OPENROWSET (BULK '\\Server\Dir1\Dir2\Dir3\ExampleXML.xml', SINGLE_BLOB) AS XMLDATA
但是我正在努力做的只是导入部分数据,请参阅下面的 XML 示例。理想情况下,我想选择 CoNum 123 或 CoNum 233 并获取该元素中的其余数据。尽管我认为这意味着以某种方式获取相关的 Row num 并从那里开始工作。
<VN>
<CompanyList>
<Row num="1">
<CoNum>123</CoNum>
<CoName>Comp1</CoName>
<DInc>1950-01-06</DInc>
</Row>
<Row num="2">
<CoNum>233</CoNum>
<CoName>Comp2</CoName>
<DInc>1955-11-10</DInc>
<DDis />
</Row>
</CompanyList>
</VN>
如果有人能以这种方式抛出一些语法或指出我正确的方向,那将不胜感激。
另外值得指出的是,我在该过程的后期将数据切碎到一个表中,但到那时它为时已晚,所以真的需要删除其余数据,或者只选择此查询中的相关数据或从import.XMLCompanyDetail 表。
更新 1:找到此链接 http://www.simple-talk.com/sql/t-sql-programming/xml-data-modification-language-workbench/ 应该会有所帮助。
更新 2:我最终编写了以下代码,可能不是最优雅的,但它似乎可以工作。花了十分钟的时间试图通过 sp_executeSQL 的参数传递变量,但无法让它工作,所以只是敲掉了下面的......将在直播前的某个时间添加 QUOTENAME。
SET @SQL =
N'
UPDATE import.XMLCompanyDetail
SET XMLData.modify(''delete (//VN/CompanyList/Row[@num != ' + CONVERT(VARCHAR,@RowNum) + '])'')
'
EXECUTE SP_EXECUTESQL @SQL
【问题讨论】:
标签: xml sql-server-2008 tags