Запросы XML в SQL Server 2008
Я хочу, чтобы загрузить данные 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 ответ
Решение
Ваш образец XML не имеет Pages
узел. Это означает, что когда FROM
вычисляется условие, между списком нулевых строк и списком из одной строки формируется перекрестное соединение. Полученный продукт не имеет строк, поэтому нет ничего SELECT
Эд, так что ничего 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
вы хотите из этих строк.