Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не работает INSERT INTO FROM OPENXML...  [new]
alex_p_n
Member [заблокирован]

Откуда: Дніпро
Сообщений: 145
Всем привет
Собсно, трабл с сабжем...
Пишу такую процедуру
create procedure dbo.sp_ImportXML @Xml NTEXT
as
  SET NOCOUNT ON
  declare @DocHandle int
  EXEC sp_xml_preparedocument @DocHandle OUTPUT, @Xml
  INSERT INTO dbo.t_NewPrice
    SELECT t.WareNumber, t.WareName, t.Price , t.PriceWithDiscount, t.PLID
    FROM OPENXML(@DocHandle,'/ROW',2) 
	WITH (WareNumber varchar(18), WareName varchar(40), Price numeric(21,9), 
	      PriceWithDiscount numeric(21,9), PLID int) t
  EXEC sp_xml_removedocument @DocHandle		  
  RETURN

В коде на делфях формирую стринг типа

'<PACKET>
<ROW WareNumber="84273448" WareName="WARENAME 1" Price="11.11" PriceWithDiscount="8.12" PLID="2"/>
<ROW WareNumber="84273449" WareName="WARENAME 2" Price="123.88" PriceWithDiscount="99.11" PLID="2"/>
</PACKET>'

Строк в пакете на самом деле около тысячи формируется, пакетов может быть несколько сотен
Выполняю процедуру - сиквель говорит, что всё ОК, запрос выполнен, но в таблицу ничего не вставляется...
Почему так может быть?..
2 авг 17, 13:59    [20694918]     Ответить | Цитировать Сообщить модератору
 Re: Не работает INSERT INTO FROM OPENXML...  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
alex_p_n, а вы, простите, просто select сначала не пробовали выполнить?

declare @DocHandle int
  EXEC sp_xml_preparedocument @DocHandle OUTPUT, @Xml
    SELECT t.WareNumber, t.WareName, t.Price , t.PriceWithDiscount, t.PLID
    FROM OPENXML(@DocHandle,'PACKET/ROW',0) 
	WITH (WareNumber varchar(18), WareName varchar(40), Price numeric(21,9), 
	      PriceWithDiscount numeric(21,9), PLID int) t
  EXEC sp_xml_removedocument @DocHandle		  
2 авг 17, 14:11    [20694960]     Ответить | Цитировать Сообщить модератору
 Re: Не работает INSERT INTO FROM OPENXML...  [new]
alex_p_n
Member [заблокирован]

Откуда: Дніпро
Сообщений: 145
Minamoto,
О, а вот так седет выполнился
Ща попробуем заинсертить таки
2 авг 17, 14:15    [20694972]     Ответить | Цитировать Сообщить модератору
 Re: Не работает INSERT INTO FROM OPENXML...  [new]
alex_p_n
Member [заблокирован]

Откуда: Дніпро
Сообщений: 145
Заработало!
Пасиба! :)
2 авг 17, 14:17    [20694974]     Ответить | Цитировать Сообщить модератору
 Re: Не работает INSERT INTO FROM OPENXML...  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5957
alex_p_n,

иногда полезно читать документацию:
OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] )
[ WITH ( SchemaDeclaration | TableName ) ]
flags
Indicates the mapping that should be used between the XML data and the relational rowset, and how the spill-over column should be filled. flags is an optional input parameter, and can be one of the following values.
2 Use the element-centric mapping.

А в приведенном xml значения хранятся в атрибутах. Т.е. нужен attribute-centric mapping (flags=0 или 1).
2 авг 17, 15:00    [20695126]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить