2010-08-31 73 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