--1. 创建fn_Split函数. ( 切分字符串, 返回一个列名为id的表 )
IF EXISTS(
SELECT
*
FROM
dbo.sysobjects
WHERE
id = OBJECT_ID(
'fn_Split'
)
AND
(TYPE =
'FN'
OR
TYPE =
'TF'
OR
TYPE =
'IF'
)
)
DROP
FUNCTION
fn_Split
GO
CREATE
FUNCTION
[dbo].[fn_Split]
(
@str
VARCHAR
(
MAX
),
@separator
VARCHAR
(10)
)
RETURNS
TABLE
AS
RETURN
(
--Example: SELECT id FROM fn_Split('a,b,d,c',',')
SELECT
B.id
FROM
(
(
--A 的作用只是生成 '<v>a</v><v>b</v><v>d</v><v>c</v>' 的XML格式的数据, 提供数据源
SELECT
[value] =
CONVERT
(XML,
'<v>'
+
REPLACE
(@str, @separator,
'</v><v>'
) +
'</v>'
)
) A
OUTER
APPLY
(
--B 的作用是将A中的 XML 数据的值枚举出来转换成行
SELECT
id = N.v.value(
'.'
,
'varchar(100)'
)
FROM
A.[value].nodes(
'/v'
) N(v)
) B
)
)
GO