2

我有以下 XML:

<row>
  <el>Field1</el>
  <el>Field2</el>
  <el>Field3</el>
  <el>Field4</el>
  <el>Field5</el>
  <el>Field6</el>
</row>
<row>
  <el>R1C1</el>
  <el>R1C2</el>
  <el>R1C3</el>
  <el>R1C4</el>
  <el>R1C5</el>
  <el>R1C6</el>
</row>
<row>
  <el>R2C1</el>
  <el>R2C2</el>
  <el>R2C3</el>
  <el>R2C4</el>
  <el>R2C5</el>
  <el>R2C6</el>
</row>
<row>

我想删除第一行?我需要这样做才能在表中插入给定 XML 结构的第二行和第三行。这就是我正在做的事情:

SET @TSVDataXML = '<row>' + REPLACE( ( '<el><![CDATA[' + REPLACE(@CommentText, CHAR(9), ']]></el><el><![CDATA[') + ']]></el>' ), CHAR(13), ']]></el></row><row><el><![CDATA[' ) + '</row>'
SELECT @TSVDataXML
INSERT INTO @ResultTable(Field1,Field2,Field3,Field4,Field5,Field6)
SELECT tbl.col.value('el[1]','NVARCHAR(20)')
      ,tbl.col.value('el[2]','NVARCHAR(20)')
      ,tbl.col.value('el[3]','NVARCHAR(20)')
      ,tbl.col.value('el[4]','NVARCHAR(20)')
      ,tbl.col.value('el[5]','NVARCHAR(20)')
      ,tbl.col.value('el[6]','NVARCHAR(20)')
FROM @TSVDataXML.nodes('//row') AS tbl(col)

因此,我的问题的替代解决方案是添加一个未插入第一行的 where 子句。不幸的是,我在 XML 方面不是很擅长。

任何建议、答案或文章都会有所帮助。

4

1 回答 1

3

这将删除 XML 中的第一行。

set @TSVDataXML.modify('delete row[1]')

看看删除(XML DML)

或者,您可以使用position()排除节点 XPath 表达式中的第一行。

from @TSVDataXML.nodes('//row[position() > 1]') as tbl(col)
于 2012-12-11T07:42:01.663 回答