OpenXML и NameSpase.....
От: postbald  
Дата: 28.07.03 07:24
Оценка:
Народ подскажите как в запросе с OpenXML
правильно с NameSpasом спросить...
сорри за каламбур


Итак есть такие данные :
<?xml version="1.0" standalone="yes"?>
<xml>
  <data>
    <row TypeReportName="Бухгалтерия" />
    <row TypeReportName="Buhgalteriya" />
  </data>
</xml>

Эти ценные данные Insertим используя эту хранимую процедуру :
CREATE PROCEDURE InsertXml (@InXMLString ntext)
AS
declare @iTree integer
(
    [TypeReportName] [char] (250) COLLATE Cyrillic_General_CI_AS NULL 
)
exec sp_xml_preparedocument @iTree output, @InXMLString
INSERT INTO tblTypeReport
SELECT * 
FROM 
openxml(@iTree, 'xml/data/row',1)
with (TypeReportName nChar(250))
exec sp_xml_removedocument @iTree
GO


Все замечательно вставляется и становится очень радостно за MSSQLServer2000

Но вот если передаем это :


<?xml version="1.0" standalone="yes"?>
<xml>
  <rs:data xmlns:rs="urn:schemas-microsoft-com:rowset">
    <z:row TypeReportName="Бухгалтерия" xmlns:z="#RowsetSchema" />
    <z:row TypeReportName="Buhgalteriya" xmlns:z="#RowsetSchema" />
  </rs:data>
</xml>


то вся радость проходит вместе с появлением сообщения:


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



И вот теперь вопрос:

Как правильно написать в OpenXMLe строку
'xml/data/row'


???????
Re: OpenXML и NameSpase.....
От: andik  
Дата: 28.07.03 11:59
Оценка: 9 (2)
Здравствуйте, postbald, Вы писали:

DECLARE @h int
EXEC sp_xml_preparedocument @h OUTPUT,
         N'
        <?xml version="1.0" standalone="yes"?>
<xml>
  <rs:data xmlns:rs="urn:schemas-microsoft-com:rowset">
    <z:row TypeReportName="Бухгалтерия" xmlns:z="#RowsetSchema" />
    <z:row TypeReportName="Buhgalteriya" xmlns:z="#RowsetSchema" />
  </rs:data>
</xml>
',
'<xml xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"/>'

SELECT * 
FROM 
openxml(@h, '/xml/rs:data/z:row', 1)
with (TypeReportName nChar(250) '@TypeReportName' )


exec sp_xml_removedocument @h
... << RSDN@Home 1.0 beta 7a >>
Re[2]: OpenXML и NameSpase.....
От: postbald  
Дата: 29.07.03 03:46
Оценка:
Здравствуйте, andik, Вы писали:

Большое спасибо — помогло ...

и волнует еще такой вопрос :
каким типом объявить входной параметр @InString для XML строки, чтобы больше влезло?
я объявляю ntext но есть подозрение что это всего 8000 символов...
чем больше тем лучше , а кодировка Unicode нужна.

CREATE PROCEDURE rsdnInsert (@InString ntext)
AS 
DECLARE @h int
EXEC sp_xml_preparedocument @h OUTPUT,
      @InString   ,
'<xml xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"/>'
INSERT INTO tblTypeReport
SELECT * 
FROM 
openxml(@h, '/xml/rs:data/z:row', 1)
with (TypeReportName nChar(250) '@TypeReportName' )
exec sp_xml_removedocument @h
GO
Re[3]: OpenXML и NameSpase.....
От: andik  
Дата: 29.07.03 07:16
Оценка: 2 (1)
Здравствуйте, postbald, Вы писали:

P>Здравствуйте, andik, Вы писали:


P>Большое спасибо — помогло ...


P>и волнует еще такой вопрос :

P>каким типом объявить входной параметр @InString для XML строки, чтобы больше влезло?
P>я объявляю ntext но есть подозрение что это всего 8000 символов...
P>чем больше тем лучше , а кодировка Unicode нужна.

Fixed and variable-length data types for storing large non-Unicode and Unicode character and binary data. Unicode data uses the UNICODE UCS-2 character set.

ntext

Variable-length Unicode data with a maximum length of 230 — 1 (1,073,741,823) characters. Storage size, in bytes, is two times the number of characters entered. The SQL-92 synonym for ntext is national text.

text

Variable-length non-Unicode data in the code page of the server and with a maximum length of 231-1 (2,147,483,647) characters. When the server code page uses double-byte characters, the storage is still 2,147,483,647 bytes. Depending on the character string, the storage size may be less than 2,147,483,647 bytes.


Думаю в твоем варианте лучше ntext
... << RSDN@Home 1.0 beta 7a >>
Re[4]: OpenXML и NameSpase.....
От: postbald  
Дата: 29.07.03 09:48
Оценка:
Здравствуйте, andik, Вы писали:


A>Variable-length Unicode data with a maximum length of 230 — 1 (1,073,741,823) characters. Storage size, in bytes, is two times the number of characters entered. The SQL-92 synonym for ntext is national text.

A>Думаю в твоем варианте лучше ntext

Большой Сенк за советы.
Будем надеятся, что хватит
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.