【发布时间】:2012-03-08 07:51:59
【问题描述】:
我有这个 xml:
DECLARE @x XML
SET @x =
'<data>
<add>a</add>
<add>b</add>
<add>c</add>
</data>';
任务:
我想列出a,b,c。
方法一:
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——它对我来说更直观,并且不需要
sp_xml_preparedocument等额外的步骤——只是更容易使用 -
@marc_s 还有...意味着 #1 可以在视图等中使用。
标签: sql sql-server xml sql-server-2005 tsql