代码之家  ›  专栏  ›  技术社区  ›  Geeth

在SQL Server 2008中查询XML

  •  0
  • Geeth  · 技术社区  · 14 年前

    我想把XML数据上传到SQL表。我正在从.NET(C)传递XML数据(工作正常)

    代码:

     ALTER PROCEDURE [dbo].[BookDetails_Insert] (@xml xml)
    
     AS
     insert into BookDetails (Pages,Descriptions) 
      SELECT 
        ParamValues.PLName.value('.','int'),
        ParamValues.PLDEscr.value('.','text')
    FROM 
        @xml.nodes('/booksdetail/Pages') as ParamValues(PLName)
                @xml.nodes('/booksdetail/Description') as ParamValues(PLName, PLDEscr)
    

    XML代码:

      <booksdetail>
      <isbn_13>70100048</isbn_13> 
      <isbn_10>00048B</isbn_10> 
      <Image_URL>http://www.thenet.com/Book/large/00/701001048.jpg</Image_URL> 
      <title>QUICK AND FLUPKE</title> 
      <Description>QUICK AND FLUPKE </Description> 
      </booksdetail>
      <booksdetail>...</booksdetail>
    

    问题:它没有在桌子上做任何事情。

    1 回复  |  直到 14 年前
        1
  •  1
  •   AakashM    14 年前

    示例XML没有 Pages 节点。这意味着当 FROM 计算子句,在零行列表和一行列表之间形成交叉联接。生成的产品没有行,因此没有任何行 SELECT Ed,所以什么都不是 INSERT 预计起飞时间。

    如果您真的想将一行插入 BookDetails 对于每一个 booksdetail 传入XML中的节点,应该这样做 类似的东西

    SELECT 
        ParamValues.PL.value('Pages[1]','int'),
        CAST(ParamValues.PLr.value('Description[1]','varchar(max)') AS text)
    FROM 
        @xml.nodes('/booksdetail') as ParamValues(PL)
    

    也就是说,将传入的XML分解为 书籍细部 节点,并拉出 .value 你想从这几排来。