2012-10-03 95 views
2

我有这个疑问如何在SQL Server 2005中读取xml?

WITH XMLNAMESPACES (DEFAULT 'http://www.w3.org/2005/Atom') 
select 
cast(idsku as int) idsku, 
cast(entregado as int) entregado from #final1 final FOR XML AUTO, ROOT ('clientesxml'), ELEMENTS 

这回

<clientesxml xmlns="http://www.w3.org/2005/Atom"> 
    <final> 
    <idsku>191</idsku> 
    <entregado>159</entregado> 
    </final> 
</clientesxml> 

我的问题我怎么创建一个存储过程,它读取XML返回,并将其转换为#tempTable

+0

您是否希望将数据插入回原来的格式? –

回答

1

以下是制作PROC时可以派上用场了几个类似的方法:

-- Declare some xml 
declare @xml xml = '<clientesxml xmlns="http://www.w3.org/2005/Atom"> 
    <final> 
    <idsku>191</idsku> 
    <entregado>159</entregado> 
    </final> 
</clientesxml>' 

-- Shred the xml 
;with xmlnamespaces (default 'http://www.w3.org/2005/Atom') 
select x.Record.value('idsku[1]', 'int') as idsku 
    , x.Record.value('entregado[1]', 'int') as entregado 
from @xml.nodes('//clientesxml/final') as x (Record) 

-- Shred and insert the xml into a new temp table 
;with xmlnamespaces (default 'http://www.w3.org/2005/Atom') 
select x.Record.value('idsku[1]', 'int') as idsku 
    , x.Record.value('entregado[1]', 'int') as entregado 
into #tempTable 
from @xml.nodes('//clientesxml/final') as x (Record) 

-- Shred and insert the xml into an existing temp table 
;with xmlnamespaces (default 'http://www.w3.org/2005/Atom') 
insert into #tempTable (idsku, entregado) 
select x.Record.value('idsku[1]', 'int') as idsku 
    , x.Record.value('entregado[1]', 'int') as entregado 
from @xml.nodes('//clientesxml/final') as x (Record) 
+0

这插入我的所有记录?或只有一个记录? – angel

+0

包含在@xml中的所有记录。一个'where'子句可以过滤它们。 –