2010-08-31 4 views
0

Я хочу загрузить данные XML в таблицу sql. Я передаю данные XML из .net (C#) (работает отлично)Запрос xml в SQL Server 2008

код:

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

Ваш образец 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 в booksdetail узлов и потяните из каждого из .value вы хотите из этих строк.

Смежные вопросы