【问题标题】:T-SQL Delete first xml rowT-SQL 删除第一个 xml 行
【发布时间】:2012-12-11 07:35:12
【问题描述】:

我有以下 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。

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

【问题讨论】:

    标签: xml tsql sql-server-2012 row


    【解决方案1】:

    这将删除 XML 中的第一行。

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

    看看delete (XML DML)

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

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

    【讨论】:

    • 非常感谢您的回答,尤其是参考资料。
    猜你喜欢
    • 2017-11-27
    • 2021-08-30
    • 1970-01-01
    • 2021-12-24
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多