Народ подскажите как в запросе с 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'
???????
Здравствуйте, 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 >>
Здравствуйте, 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
Здравствуйте, 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 >>
Здравствуйте, 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
Большой Сенк за советы.
Будем надеятся, что хватит