Запросы XML в SQL Server 2008 - PullRequest
       14

Запросы XML в SQL Server 2008

0 голосов
/ 31 августа 2010

Я хочу загрузить данные xml в таблицу sql.Я передаю данные XML из .net (c #) (работает нормально)

код:

 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 Ответ

1 голос
/ 31 августа 2010

Ваш образец xml не имеет узла Pages.Это означает, что при вычислении предложения FROM формируется перекрестное соединение между списком из нулевых строк и списком из одной строки.Полученный продукт не имеет строк, поэтому ничего не существует SELECT ed, поэтому ничего не равно INSERT ed.

Если вы действительно хотите вставить одну строку в 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 s из этихстроки.

...