该问题来自社区提问。
效率不一定很高,但是肯定比替换为select union all好些,起码不用考虑因为字符串过长而导致动态sql语句过长
代码如下:
DECLARE
@str
varchar
(
1000
)
DECLARE
@idoc
int
;
DECLARE
@doc
xml;
set
@str
=
'
1¦3¦4¦25
'
set
@doc
=
cast
(
'
<Root><item><ID>
'
+
replace
(
@str
,
'
¦
'
,
'
</ID></item><item><ID>
'
)
+
'
</ID></item></Root>
'
as
xml)
EXEC
sp_xml_preparedocument
@Idoc
OUTPUT,
@doc
SELECT
*
FROM
OPENXML (
@Idoc
,
'
/Root/item
'
,
2
)
WITH
(
[
ID
]
varchar
(
10
)
)
/*
ID
-----------
1
3
4
25
*/