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

Откуда:
Сообщений: 57
из ниже приведенного фрагмента кода необходимо вставить в таблицу часть имени тега а именно цифру в конце например LAW_1 вставить в таблицу цифру 1 и т.д. нужно сделать это с помощью OpenXML... Подскажите пожалуйста кто знает как такое провернуть )

<package>
<LAW_1
distr="101729"
comp="1"
ric="445"
netCount="0"
userType="USR"
technolType=""
/>
<QSA_4
distr="129130"
comp="1"
ric="445"
netCount="0"
userType="USR"
technolType=""
/>
<PAP_6
distr="119889"
comp="1"
ric="445"
netCount="0"
userType="USR"
technolType=""
/>
<KOR_39
distr="15392"
comp="1"
ric="445"
netCount="0"
userType="USR"
technolType=""
/>
<RLAW328_7
distr="3360"
comp="1"
ric="328"
netCount="0"
userType="USR"
technolType=""
/>
</package>
16 май 11, 15:23    [10659026]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
iljy
Member

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

declare @x xml = '<package>
<LAW_1
distr="101729"
comp="1"
ric="445"
netCount="0"
userType="USR"
technolType=""
/>
<QSA_4
distr="129130"
comp="1"
ric="445"
netCount="0"
userType="USR"
technolType=""
/>
<PAP_6
distr="119889"
comp="1"
ric="445"
netCount="0"
userType="USR"
technolType=""
/>
<KOR_39
distr="15392"
comp="1"
ric="445"
netCount="0"
userType="USR"
technolType=""
/>
<RLAW328_7
distr="3360"
comp="1"
ric="328"
netCount="0"
userType="USR"
technolType=""
/>
</package>'

select SUBSTRING(s, charindex('_',s)+1,8000)
from(
	select cast(n.query('local-name(.)') as varchar) s
	from @x.nodes('/package/*') t(n)
)t
16 май 11, 15:30    [10659095]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
Bulat2
Member

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

объясните пожалуйста как всё происходит? например что такое n.query, s, t? и как передать xml документ из дельфи в переменную типа xml в хранимке?

спасибо!
16 май 11, 16:13    [10659514]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
сейчас я передаю xml из дельфи в виде текста в параметр типа text в хранимой процедуре
16 май 11, 16:15    [10659533]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
iljy
Member

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

http://msdn.microsoft.com/en-us/library/ms190798.aspx

Как из дельфей передать параметр - надо спрашивать в форуме по дельфям.
16 май 11, 16:16    [10659538]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
как это будет выглядеть в хранимой процедуре которая ниже?

ALTER PROCEDURE [dbo].[spARB](@xmlDoc xml, @file_name varchar (50))
AS
BEGIN
DECLARE @docHandle int
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDoc

-- Execute a SELECT statement using OPENXML rowset provider.
insert into dbo.usr_cons 
SELECT *, @file_name --вставляем имя xml файла 
--вставляем данные из xml файла
FROM 
	 OPENXML (@docHandle, '/user_info//updates', 2)
     WITH (	usr_file_date varchar (20) '//USR_FILE/@date',
			usr_file_time varchar (20) '//USR_FILE/@time',
			usr_file_kind varchar (50) '//USR_FILE/@kind',
			info_cod_date varchar (20) '//info.cod/@date',
			info_cod_time varchar (20) '//info.cod/@time',
			consult_tor_date varchar (20) '//consult.tor/@date',
			consult_tor_time varchar (20) '//consult.tor/@time',

			netCount int '//@netCount',
			

			vDistr varchar (50) '..//@directory',
			nDistr varchar (50) '..//@nDistr',
			nComp int '..//@nComp',
			directory varchar (50) '..//@directory',
			nCat int '..//@nCat',
			nTexts int '..//@nTexts',
			n3 int '..//@n3',													
			n4 int '..//@n4',		
			n5 int '..//@n5',		
			n6 int '..//@n6',
			compliance varchar (50) '..//@compliance',			

			u1_date varchar (20) './/u1/@date', 
			u1_time varchar (20) './/u1/@time', 
			u1_sysdate varchar (20) './/u1/@sysdate', 
			u1_docs int './/u1/@docs', 
			u1_kind varchar (10) './/u1/@kind',
			u2_date varchar (20) './/u2/@date', 
			u2_time varchar (20) './/u2/@time', 
			u2_sysdate varchar (20)'.//u2/@sysdate', 
			u2_docs int './/u2/@docs', 
			u2_kind varchar (10)'.//u2/@kind',
			u3_date varchar (20) './/u3/@date', 
			u3_time varchar (20) './/u3/@time', 
			u3_sysdate varchar (20) './/u3/@sysdate', 
			u3_docs int'.//u3/@docs', 
			u3_kind varchar (10)'.//u3/@kind',
			u4_date varchar (20) './/u4/@date', 
			u4_time varchar (20) './/u4/@time', 
			u4_sysdate varchar (20) './/u4/@sysdate', 
			u4_docs int'.//u4/@docs', 
			u4_kind varchar (10)'.//u4/@kind',
			u5_date varchar (20) './/u5/@date', 
			u5_time varchar (20) './/u5/@time', 
			u5_sysdate varchar (20) './/u5/@sysdate', 
			u5_docs int'.//u5/@docs', 
			u5_kind varchar (10)'.//u5/@kind',
			u6_date varchar (20) './/u6/@date', 
			u6_time varchar (20) './/u6/@time', 
			u6_sysdate varchar (20)'.//u6/@sysdate', 
			u6_docs int'.//u6/@docs', 
			u6_kind varchar (10)'.//u6/@kind',	
			u7_date varchar (20) './/u7/@date', 
			u7_time varchar (20) './/u7/@time', 
			u7_sysdate varchar (20) './/u7/@sysdate', 
			u7_docs int'.//u7/@docs', 
			u7_kind varchar (10)'.//u7/@kind',
			u8_date varchar (20) './/u8/@date', 
			u8_time varchar (20) './/u8/@time', 
			u8_sysdate varchar (20)'.//u8/@sysdate', 
			u8_docs int'.//u8/@docs', 
			u8_kind varchar (10)'.//u8/@kind',	
			u9_date varchar (20) './/u9/@date', 
			u9_time varchar (20) './/u9/@time', 
			u9_sysdate varchar (20) './/u9/@sysdate', 
			u9_docs int './/u9/@docs', 
			u9_kind varchar (10) './/u9/@kind',
			u10_date varchar (20) './/u10/@date', 
			u10_time varchar (20) './/u10/@time', 
			u10_sysdate varchar (20) './/u10/@sysdate', 
			u10_docs int'.//u10/@docs', 
			u10_kind varchar (10)'.//u10/@kind',
			version varchar (50)'/user_info/res_version')
EXEC sp_xml_removedocument @docHandle
END
16 май 11, 17:15    [10660083]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
поправка. там @xmlDoc типа text а не xml
16 май 11, 17:18    [10660111]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
нефиговое изращение,нарочно не придумаеш рубрика ...
16 май 11, 17:19    [10660118]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
напишите пожалуйста кто-нибудь как это сделать? в моей процедуре
17 май 11, 09:15    [10662575]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> напишите пожалуйста кто-нибудь как это сделать? в моей процедуре

@mp:localname
http://msdn.microsoft.com/ru-ru/library/ms178088.aspx

Posted via ActualForum NNTP Server 1.4

17 май 11, 09:22    [10662604]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
Bulat2
Member

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

а как подняться на еще 2 уровня выше с помощью @mp:parentlocalname?
17 май 11, 11:23    [10663379]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> а как подняться на еще 2 уровня выше с помощью @mp:parentlocalname?

такого нет. с openxml придется два запроса делать и потом их объединять.
ну, или edge table разбирать.

Posted via ActualForum NNTP Server 1.4

17 май 11, 11:52    [10663581]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
daw,
приведите пример пожалуйста как используя edge table решить мою задачу.

Спасибо огромное за ответы!
17 май 11, 11:58    [10663639]     Ответить | Цитировать Сообщить модератору
 Re: вставка имени узла в таблицу через OpenXML  [new]
Bulat2
Member

Откуда:
Сообщений: 57
проблема решена! ) использовал 2 запроса OpenXML... спасибо всем! и огромное спасибо daw!!!
17 май 11, 17:00    [10666266]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить