一般在存储过程里,遇到前台传入的XML可以用类似如下的语句
--@XmlDocument是前台传入的xml 类型是 varchar(max)
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @XmlDocument
insert into #XMLTable
SELECT * FROM OPENXML (@DocHandle, '/Roots/Base',2)
WITH (
f1 varchar(20),
f2 uniqueidentifier,
f3 float,
……
……
)
之所以能用 f1,f2,是因为XML里,在 /Roots/Base 下一层,就是各个f1,f2的定义。
但是现在前台的XML,其f1,f2变成了用户定义。
<root>
<base>
<aaa id="0", desc="aaa",xxxxxxxxx>
<aa1 xxxxxx></aa1>
</aaa>
<bbb id="2",desc="bbb", xxxxx>
</bbb>
……
……
</base>
</root>
这里,aaa和bbb是任意的。每一层底下有几个子节点,也是任意的(类似aa1)。每一层的描述也是任意的,但是都有id和desc
现在要把这样的XML保存到一个表里,字段是 name,id,desc
改怎么写?
以上面的XML为例子,表里应该是
name id desc
aaa 0 aaa
bbb 2 bbb
------解决方案--------------------
参考例子:
DECLARE @XmlDocumentHandle int
DECLARE @XmlDocument nvarchar(4000)
SET @XmlDocument = N'<ROOT>
<Customer>
<CustomerID>VINET</CustomerID>
<ContactName>Paul Henriot</ContactName>
<Order OrderID="10248" CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail ProductID="11" Quantity="12"/>
<OrderDetail ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer>
<CustomerID>LILAS</CustomerID>
<ContactName>Carlos Gonzlez</ContactName>
<Order OrderID="10283" CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">