使用OpenXML将多个参数传递给SQL Server存储过程
有没有办法使用OpenXML和SQL Server存储过程在不使用临时表的情况下传递多个参数(这实际上减慢了我们的速度?)?使用OpenXML将多个参数传递给SQL Server存储过程
例如,一个参数:
exec usp_FooBar
'<Data><States><State StateID="16" StateName="Massachusetts" "/></States></Data>'
在usp_FooBar
我会得到通过
Declare @StateID int
.
.
.
SELECT @StateID = StateID FROM
OPENXML(@IDOC,'/Data/States/State',1)
WITH
(
StateID INT
)
然而价值,可以说,我想在多个国家经过:
exec usp_FooBar
'<Data><States><State StateID="16" StateName="Massachusetts" "/><State StateID="87" StateName="Minnesota" /></States></Data>'
有什么办法可以做类似于s单一的状态场景,我可以接受任意数量的参数,而不使用临时表(正如我所提到的那样,对我来说已经对性能产生了重大影响)?
例
Declare @XML xml = '
<Data>
<States>
<State StateID="16" StateName="Massachusetts" />
<State StateID="25" StateName="New York" />
<State StateID="13" StateName="Rhode Island" />
</States>
</Data>
'
Select Grp = r.value('@StateID','int')
,Item = attr.value('local-name(.)','varchar(100)')
,Value = attr.value('.','varchar(max)')
From @XML.nodes('/Data/States/State') as A(r)
Cross Apply A.r.nodes('./@*') AS B(attr)
返回
Grp Item Value
16 StateID 16
16 StateName Massachusetts
25 StateID 25
25 StateName New York
13 StateID 13
13 StateName Rhode Island
你的例子如何工作才智h多个州? –
@Amanda_Panda有一刻,我会更新我的回答 –
@Amanda_Panda对不起,有一个快速的电话。我添加了一个GRP列来隔离节点。这可以是row_number作为更通用的项目 –
我认为临时表是最快的方法,这里是所有解决方案的好文章:http://www.sommarskog.se /share_data.html –
我会推荐沟渠'OpenXML'并使用** native ** XQuery支持来代替 - 是的,你绝对可以做到这一点,没有问题 –