【发布时间】:2009-11-05 10:55:59
【问题描述】:
如果我将 xml 参数传递给如下所示的存储过程:
<ClientKeys>
<ck>3052</ck>
<ck>3051</ck>
<ck>3050</ck>
<ck>3049</ck>
...
</ClientKeys>
...然后将 XML 转换为临时表,如下所示:
CREATE TABLE #ClientKeys ( ClientKey varchar(36) )
INSERT INTO #ClientKeys (ClientKey)
SELECT ParamValues.ck.value('.','VARCHAR(36)')
FROM @ClientKeys.nodes('/ClientKeys/ck') as ParamValues(ck)
...临时 tbl 已填充,一切都很好。然而,填充所述表所花费的时间与 xml 中“ck”元素的数量严格成正比——这是我没有预料到的,因为没有迭代步骤。因此,填充 tbl 所需的时间很快就会变得“太长”。
有没有更快的方法来实现上述目标?
【问题讨论】:
-
根据您的基准,“长”有多长?迭代步骤被隐式执行。我只能发表评论,因为除了提升硬件之外,我不知道如何使操作更快:P
-
好吧,这里的调用
FROM @ClientKeys.nodes(.....)基本上是对“ck”节点的迭代——节点越多,得到的行就越多。
标签: sql sql-server xml sql-server-2005