SQL Server:OPENXML与SELECT..FROM处理XML时?
发布时间:2020-12-12 08:44:32 所属栏目:MsSql教程 来源:网络整理
导读:我有这个xml: DECLARE @x XMLSET @x = 'data adda/add addb/add addc/add /data'; 任务: 我想列出a,b,c. 方法1: SELECT s.value('.','VARCHAR(8000)') AS [ADD]FROM @x.nodes('/data/add') AS t(s) 方法2: DECLARE @idoc INTEXEC sp_xml_preparedocument
我有这个xml:
DECLARE @x XML SET @x = '<data> <add>a</add> <add>b</add> <add>c</add> </data>'; 任务: 我想列出a,b,c. 方法1: SELECT s.value('.','VARCHAR(8000)') AS [ADD] FROM @x.nodes('/data/add') AS t(s) 方法2: DECLARE @idoc INT EXEC sp_xml_preparedocument @idoc OUTPUT,@x SELECT * FROM OPENXML(@idoc,'/data/add',2) WITH ([add] NVARCHAR(MAX) '.') 他们都给我: 题 : 哪个是首选方式? 后者与前者(或副经文)有什么优势吗? 解决方法一个简单的测试表明,您的方法1比方法2花费的时间更少.我不会总结这样的结论.它可以依赖于XML的结构以及您如何查询XML.存储程序测试: create procedure TestXML @X xml as set nocount on select X.N.value('.','varchar(8000)') from @X.nodes('/root/item') as X(N) go create procedure TestOpenXML @X xml as set nocount on declare @idoc int exec sp_xml_preparedocument @idoc out,@X select value from openxml(@idoc,'/root/item',1) with (value varchar(8000) '.') exec sp_xml_removedocument @idoc 测试: declare @X xml set @X = ( select number as '*' from master..spt_values for xml path('item'),root('root'),type ) set statistics time on exec TestXML @X exec TestOpenXML @X 结果方法1: SQL Server Execution Times: CPU time = 63 ms,elapsed time = 70 ms. 结果方法2: SQL Server Execution Times: CPU time = 156 ms,elapsed time = 159 ms. (在SQL Server 2005上测试.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |