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

Откуда:
Сообщений: 173
Добрый день
Есть XML файл довольно простой схемы:
<rs:row Id='666' d_publ='07.02.2006' Name='Дядя вася' Header='Заголовок' Text='Некий текст, размером от 1К до 10000К'/>
и процедура закачки в таблицу:
DECLARE @idoc Int
	EXEC sp_xml_preparedocument @idoc OUTPUT, @CatalogText OUTPUT,
	'<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"/>'


insert into my_table
	SELECT Id, d_publ,IssuerName,Header,Text  FROM  OPENXML(@idoc, '//rs:data/z:row') 
	WITH (Id int  ,
	d_publ varchar(10),
	Header varchar(255)   ,
	[Text] text )
	EXEC sp_xml_removedocument @idoc

Выполняется без ошибок. Все поля, кроме Text пишутся корректно. А с текстом - проблема. Иногда записывает не все поле, а часть. Кодировка XML - UTF-8.

Кто-нибудь бодался?
16 мар 06, 18:10    [2457303]     Ответить | Цитировать Сообщить модератору
 Re: Теряются значения текстового атрибута при загрузке через OPENXML  [new]
dimong2004
Member

Откуда:
Сообщений: 173
Ау!
17 мар 06, 09:53    [2458616]     Ответить | Цитировать Сообщить модератору
 Re: Теряются значения текстового атрибута при загрузке через OPENXML  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31616
dimong2004
Ау!
Вы-бы текст полностью привели. У вас xml невалидный.
17 мар 06, 10:51    [2458910]     Ответить | Цитировать Сообщить модератору
 Re: Теряются значения текстового атрибута при загрузке через OPENXML  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31616
И вообще, @CatalogText не может быть OUTPUT
17 мар 06, 10:51    [2458915]     Ответить | Цитировать Сообщить модератору
 Re: Теряются значения текстового атрибута при загрузке через OPENXML  [new]
dimong2004
Member

Откуда:
Сообщений: 173
1. XML валидный
2. OUTPUT - можно.
Еще мысли?
17 мар 06, 11:56    [2459328]     Ответить | Цитировать Сообщить модератору
 Re: Теряются значения текстового атрибута при загрузке через OPENXML  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31616
dimong2004
2. OUTPUT - можно.

Syntax
sp_xml_preparedocument hdoc OUTPUT
[, xmltext]
[, xpath_namespaces]
И вообще, по логике, зачем в sp_xml_preparedocument??? Она может вам вернуть xml-текст?


dimong2004
1. XML валидный
Вы с ним запускали процедуру?

dimong2004
Еще мысли?
Больше никаких. Приведите скрипт, каторый будет выполняться, не сообщая о синтаксических ошибках; длинный текст не нужно - достаточно, как вы сделали, написать "Некий текст, размером от 1К до 10000К"
17 мар 06, 12:13    [2459417]     Ответить | Цитировать Сообщить модератору
 Re: Теряются значения текстового атрибута при загрузке через OPENXML  [new]
Glory
Member

Откуда:
Сообщений: 104760
dimong2004
1. XML валидный
2. OUTPUT - можно.

1. У меня на

DECLARE @idoc Int
EXEC sp_xml_preparedocument @idoc OUTPUT, 
N'<rs:row Id=''666'' d_publ=''07.02.2006'' Name=''Дядя вася'' Header=''Заголовок'' Text=''Некий текст, размером от 1К до 10000К''/>',
	'<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"/>'

SELECT *  FROM  OPENXML(@idoc, '//rs:data/z:row') 
	WITH (Id int  ,
	d_publ varchar(10),
	Header varchar(255)   ,
	[Text] text )

EXEC sp_xml_removedocument @idoc
выдается

Server: Msg 6603, Level 16, State 1, Procedure sp_xml_preparedocument, Line 2
XML parsing error: Reference to undeclared namespace prefix: 'rs'.

2. хм. где написано что можно и что это будет на что-то влиять ?
17 мар 06, 12:18    [2459449]     Ответить | Цитировать Сообщить модератору
 Re: Теряются значения текстового атрибута при загрузке через OPENXML  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31616
Glory
выдается
Server: Msg 6603, Level 16, State 1, Procedure sp_xml_preparedocument, Line 2
XML parsing error: Reference to undeclared namespace prefix: 'rs'.
А у меня:
Server: Msg 6603, Level 16, State 1, Procedure sp_xml_preparedocument, Line 3
XML parsing error: An invalid character was found in text content.

ЗЫ.
select @@version
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
17 мар 06, 12:23    [2459478]     Ответить | Цитировать Сообщить модератору
 Re: Теряются значения текстового атрибута при загрузке через OPENXML  [new]
dimong2004
Member

Откуда:
Сообщений: 173
Ok. Я просто дал структуру XML из-за экономии места.
А вот сам XML
<?xml version="1.0" encoding="UTF-8" ?>
<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'>
		<s:AttributeType name='Id' rs:number='1' rs:nullable='true' rs:writeunknown='true'>
			<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true'/>
		</s:AttributeType>

		<s:AttributeType name='d_publ' rs:number='2' rs:nullable='true'>

			<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='10' rs:fixedlength='true'/>

		</s:AttributeType>

		<s:AttributeType name='Name' rs:number='3' rs:nullable='true'>

			<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='50'/>

		</s:AttributeType>

		
		<s:AttributeType name='Header' rs:number='6' rs:nullable='true' rs:writeunknown='true'>

			<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='255'/>

		</s:AttributeType>

		<s:AttributeType name='Text' rs:number='7' rs:nullable='true' rs:maydefer='true'>

			<s:datatype dt:type='string' dt:maxLength='1073741823' rs:long='true'/>

		</s:AttributeType>

		<s:extends type='rs:rowbase'/>

	</s:ElementType>

</s:Schema>

<rs:data>
<rs:row Id='666' d_publ='07.02.2006' Name='Дядя вася' Header='Заголовок' Text='Некий текст, размером от 1К до 10000К'/>
</rs:data>
</xml>

Если будете юзать этот XML в процедуре, поменяйте кодировку.
21 мар 06, 11:37    [2470746]     Ответить | Цитировать Сообщить модератору
 Re: Теряются значения текстового атрибута при загрузке через OPENXML  [new]
dimong2004
Member

Откуда:
Сообщений: 173
Если длина текста до 255 байт, то все выполняется отлично, а вот если больше, то текст обрубается случайным образом (я, по крайней мере, системы не нашел) Пробовал предварительно удалять 0D 0A - не влияет.
21 мар 06, 11:43    [2470787]     Ответить | Цитировать Сообщить модератору
 Re: Теряются значения текстового атрибута при загрузке через OPENXML  [new]
dimong2004
Member

Откуда:
Сообщений: 173
Сорри, вот правильный
<?xml version="1.0" encoding="UTF-8" ?>
<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'>
		<s:AttributeType name='Id' rs:number='1' rs:nullable='true' rs:writeunknown='true'>
			<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true'/>
		</s:AttributeType>

		<s:AttributeType name='d_publ' rs:number='2' rs:nullable='true'>

			<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='10' rs:fixedlength='true'/>

		</s:AttributeType>

		<s:AttributeType name='Name' rs:number='3' rs:nullable='true'>

			<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='50'/>

		</s:AttributeType>

		
		<s:AttributeType name='Header' rs:number='6' rs:nullable='true' rs:writeunknown='true'>

			<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='255'/>

		</s:AttributeType>

		<s:AttributeType name='Text' rs:number='7' rs:nullable='true' rs:maydefer='true'>

			<s:datatype dt:type='string' dt:maxLength='1073741823' rs:long='true'/>

		</s:AttributeType>

		<s:extends type='rs:rowbase'/>

	</s:ElementType>

</s:Schema>

<rs:data>
<z:row Id='666' d_publ='07.02.2006' Name='Дядя вася' Header='Заголовок' Text='Некий текст, размером от 1К до 10000К'/>
</rs:data>
</xml>

21 мар 06, 11:47    [2470820]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить