![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка 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 большого размера. Очень негативно влияет на производительность.