Форум: "Базы";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
ВнизЗагрузка xml с удаленного ресурса Найти похожие ветки
← →
alsov © (2006-10-26 10:28) [0]Приветствую, Мастера
Есть некий 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) [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 большого размера. Очень негативно влияет на производительность.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.013 c