titbasoft
یک شنبه 14 فروردین 1384, 14:08 عصر
چون خودم حالشو بردم گفتم شاید بد نباشه برای همه بگم.
با استفاده از دستور OPENXML می تونید فایل های (رشته ها) با فرمت XML رو به قولی parse کرد. این روش به این درد میخوره که اگر مثلا یکسری دیتا با فرمت های مختلف هر روز به یک data center برسه فقط کافیه به راحتی به فرمت XML تبدیل بشه و ازش query گرفته بشه کاملا مثل یک جدول.
مثال:
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
<OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
<Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
<OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
</Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement that uses the OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer',1)
WITH (CustomerID varchar(10),
ContactName varchar(20))
با استفاده از sp_xml_preparedocument یک هندل برای رشته خود بدست آورید(idoc@)
با استفاده از sp_xml_removedocument هندل را آزاد کنید
EXEC sp_xml_removedocument @idoc
دقت کنید که نام فیلد ها case sensitive هستند
:wink: :flower:
با استفاده از دستور OPENXML می تونید فایل های (رشته ها) با فرمت XML رو به قولی parse کرد. این روش به این درد میخوره که اگر مثلا یکسری دیتا با فرمت های مختلف هر روز به یک data center برسه فقط کافیه به راحتی به فرمت XML تبدیل بشه و ازش query گرفته بشه کاملا مثل یک جدول.
مثال:
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
<OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
<Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
<OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
</Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement that uses the OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer',1)
WITH (CustomerID varchar(10),
ContactName varchar(20))
با استفاده از sp_xml_preparedocument یک هندل برای رشته خود بدست آورید(idoc@)
با استفاده از sp_xml_removedocument هندل را آزاد کنید
EXEC sp_xml_removedocument @idoc
دقت کنید که نام فیلد ها case sensitive هستند
:wink: :flower: