Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загрузка xml с удаленного ресурса [MSSQL]


alsov ©   (2006-10-26 10:28:00) 

Приветствую, Мастера

Есть некий xml файл, который отдает http сервер.

Нужно сделать выборку из его и сформировать resultset.

Как получить из xml выборку я разобрался. Делаю так:

begin
 DECLARE @idoc int
 EXEC sp_xml_preparedocument @idoc OUTPUT, '
<?xml version="1.0" encoding="Windows-1251" ?>
<root>
 <tag value="Value1" date="2006-10-25" time="17:04:19" />
 <tag value="Value2" date="2006-10-25" time="17:04:19" />
 <tag value="Value3" date="2006-10-25" time="17:04:19" />
 <tag value="Value4" date="2006-10-25" time="17:04:19" />
 <tag value="Value5" date="2006-10-25" time="17:04:19" />
</root>'
 SELECT *
 FROM OPENXML (@idoc, '/root/tag',1)
         WITH (value  varchar(15),
               date varchar(20),
               time varchar(20)
               )

 EXEC sp_xml_removedocument @iDoc
end


Но как вместо строки запихнуть урл на xml ума не приложу.

Заранее спасибо за любую помощь


alsov   (2006-10-26 15:22:00) [1]

Все разобрался сам
Нашел процедуру

CREATE PROCEDURE LoadXMLFromFile
(
@tcFileNameVARCHAR(255),
@tcXMLStringVARCHAR(8000) OUTPUT
) AS
BEGIN
-- Scratch variables used in the script
DECLARE @retVal INT
DECLARE @oXML INT
DECLARE @errorSource VARCHAR(8000)
DECLARE @errorDescription VARCHAR(8000)
DECLARE @loadRetVal INT

-- Initialize the XML document
EXEC @retVal = sp_OACreate 'MSXML2.DOMDocument', @oXML OUTPUT
IF (@retVal <> 0)
BEGIN
-- Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

-- Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

EXEC @retVal = sp_OASetProperty @oXML, 'async', 0
IF @retVal <> 0
BEGIN
-- Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

-- Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

-- Load the XML into the document
EXEC @retVal = sp_OAMethod @oXML, 'load', @loadRetVal OUTPUT, @tcFileName
IF (@retVal <> 0)
BEGIN
-- Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

-- Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

-- Get the loaded XML
EXEC @retVal = sp_OAMethod @oXML, 'xml', @tcXMLString OUTPUT
IF (@retVal <> 0)
BEGIN
-- Trap errors if any
EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT
RAISERROR (@errorDescription, 16, 1)

-- Release the reference to the COM object
EXEC sp_OADestroy @oXML
RETURN
END

-- Release the reference to the COM object
EXEC sp_OADestroy @oXML

END


Все равно не решило проблемы. Но я думаю что решения её в mssql нет вообще.

Первая проблема (скорее самая важная) - невозможно из этого кода сделать вьюху(или функцию) и обращаться в xml как к таблице.
Вторая - проблема xml большого размера. Очень негативно влияет на производительность.


Наверх

Титульная страница Поиск, карта сайта Написать письмо