2010-08-31 81 views
0

我不想上传xml数据到sql表格。我从.NET(C#)传递XML数据(做工精细)在sql server 2008中查询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

您的示例x​​ml没有Pages节点。这意味着,当计算FROM子句时,将在零行的列表和一行的列表之间形成交叉连接。由此产生的产品没有行,所以没有什么SELECT版,所以没有什么是INSERT版。

如果你真的想插入一行BookDetails在传入XML每个booksdetail节点,你应该做的类似

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节点,拉从这些行中找出你想要的每个.value