T-SQL删除第一个xml行

时间:2012-12-11 07:35:13

标签: xml tsql sql-server-2012 row

我有以下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方面的表现不是很好。

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

1 个答案:

答案 0 :(得分:3)

这将删除XML中的第一行。

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

查看delete (XML DML)

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

from @TSVDataXML.nodes('//row[position() > 1]') as tbl(col)