【问题标题】:Querying a xml in sql server 2008在 sql server 2008 中查询 xml
【发布时间】:2010-08-31 06:55:40
【问题描述】:

我想把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>

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

【问题讨论】:

    标签: xml sql-server-2008 stored-procedures xquery


    【解决方案1】:

    您的示例 xml 没有 Pages 节点。这意味着当计算FROM 子句时,会在零行列表和一行列表之间形成交叉连接。生成的产品没有行,所以没有 SELECTed,所以没有 INSERTed。

    如果您真的想为传入 xml 中的每个 booksdetail 节点在 BookDetails 中插入一行,您应该执行 类似的操作

    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 分解为 booksdetail 节点,然后从这些行中提取您想要的每个 .values。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多