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

Откуда: Смоленск
Сообщений: 303
Есть следующий XML:
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
	xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
	xmlns:rs="urn:schemas-microsoft-com:rowset"
	xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
	<s:ElementType name="row" content="eltOnly" rs:updatable="true">
		<s:AttributeType name="id" rs:number="1" rs:basecatalog="Moscow" rs:basetable="tbMaterials" rs:basecolumn="id"
			 rs:keycolumn="true" rs:autoincrement="true">
			<s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false"/>
		</s:AttributeType>
		<s:AttributeType name="articul" rs:number="2" rs:writeunknown="true" rs:basecatalog="Moscow" rs:basetable="tbMaterials"
			 rs:basecolumn="articul">
			<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="9" rs:maybenull="false"/>
		</s:AttributeType>
		<s:extends type="rs:rowbase"/>
	</s:ElementType>
</s:Schema>
<rs:data>
	<z:row id="537" articul="1-0101018"/>
	<z:row id="1768" articul="1-0101025"/>
	<z:row id="541" articul="1-0101027"/>
	<z:row id="1836" articul="1-0101030"/>
	<z:row id="638" articul="1-0102044"/>
</rs:data>
</xml>

Надо получить:
id   articul   
---- --------- 
537  1-0101018
1768 1-0101025
541  1-0101027
1836 1-0101030
638  1-0102044

Как это сделать?
7 сен 04, 18:40    [941305]     Ответить | Цитировать Сообщить модератору
 Re: Опять про XML  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
declare @idoc int, @xml nvarchar(4000)
SET @xml = N'<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
	xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
	xmlns:rs="urn:schemas-microsoft-com:rowset"
	xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
	<s:ElementType name="row" content="eltOnly" rs:updatable="true">
		<s:AttributeType name="id" rs:number="1" rs:basecatalog="Moscow" rs:basetable="tbMaterials" rs:basecolumn="id"
			 rs:keycolumn="true" rs:autoincrement="true">
			<s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false"/>
		</s:AttributeType>
		<s:AttributeType name="articul" rs:number="2" rs:writeunknown="true" rs:basecatalog="Moscow" rs:basetable="tbMaterials"
			 rs:basecolumn="articul">
			<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="9" rs:maybenull="false"/>
		</s:AttributeType>
		<s:extends type="rs:rowbase"/>
	</s:ElementType>
</s:Schema>
<rs:data>
	<z:row id="537" articul="1-0101018"/>
	<z:row id="1768" articul="1-0101025"/>
	<z:row id="541" articul="1-0101027"/>
	<z:row id="1836" articul="1-0101030"/>
	<z:row id="638" articul="1-0102044"/>
</rs:data>
</xml>
'

EXEC sp_xml_preparedocument @idoc OUTPUT, @xml, '<root xmlns:s=''uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882''
	xmlns:dt=''uuid:C2F41010-65B3-11d1-A29F-00AA00C14882''
	xmlns:rs=''urn:schemas-microsoft-com:rowset''
	xmlns:z=''#RowsetSchema''/>'
SELECT * FROM OPENXML(@idoc, '//rs:data/z:row', 2) WITH (id int '@id', articul nvarchar(200) '@articul')
EXEC sp_xml_removedocument @idoc OUT
7 сен 04, 18:53    [941333]     Ответить | Цитировать Сообщить модератору
 Re: Опять про XML  [new]
alex_sm
Member

Откуда: Смоленск
Сообщений: 303
Спасибо
7 сен 04, 18:56    [941338]     Ответить | Цитировать Сообщить модератору
 Re: Опять про XML  [new]
sardonyx
Member

Откуда:
Сообщений: 39
create procedure spr_ParseZRow @xml ntext 
as
declare @hDoc int
exec sp_xml_preparedocument @hDoc output,@xml,
'<root xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
	xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
	xmlns:rs="urn:schemas-microsoft-com:rowset"
	xmlns:z="#RowsetSchema"/>'
select * 
from OPENXML(@hDoc,'//rs:data/z:row')
with (
	id int '@id',
	articul varchar(100) '@articul'
)
exec sp_xml_removedocument @hDoc

GO

exec spr_ParseZRow @xml = N'<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
	xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
	xmlns:rs="urn:schemas-microsoft-com:rowset"
	xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
	<s:ElementType name="row" content="eltOnly" rs:updatable="true">
		<s:AttributeType name="id" rs:number="1" rs:basecatalog="Moscow" rs:basetable="tbMaterials" rs:basecolumn="id"
			 rs:keycolumn="true" rs:autoincrement="true">
			<s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false"/>
		</s:AttributeType>
		<s:AttributeType name="articul" rs:number="2" rs:writeunknown="true" rs:basecatalog="Moscow" rs:basetable="tbMaterials"
			 rs:basecolumn="articul">
			<s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="9" rs:maybenull="false"/>
		</s:AttributeType>
		<s:extends type="rs:rowbase"/>
	</s:ElementType>
</s:Schema>
<rs:data>
	<z:row id="537" articul="1-0101018"/>
	<z:row id="1768" articul="1-0101025"/>
	<z:row id="541" articul="1-0101027"/>
	<z:row id="1836" articul="1-0101030"/>
	<z:row id="638" articul="1-0102044"/>
</rs:data>
</xml>
'
7 сен 04, 19:21    [941375]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить