使用情形:
1. 想将某表关联表值函数返回的表
例如:某表有Col1,Col2两列,想将Col2中的文本拆分为多行,并在拆分后保留Col1和Col2的对应关系
--方法1:使用游标,逐行拆分后拼接(略)
--方法2:使用APPLY进行逐行运算
--表值函数 dbo.SplitString:按照分隔符将文本转换为表
declare @str1 varchar(max)
set @str1 = '7,8,9'
SELECT * FROM dbo.SplitString(@str1,',',1)
--示例:某表有Col1,Col2两列,想将Col2中的文本拆分为多行,并在拆分后保留Col1和Col2的对应关系
CREATE TABLE #TMP(
NAME VARCHAR(100) NULL,
STRING VARCHAR(MAX) NULL
)
TRUNCATE TABLE #TMP
INSERT INTO #TMP(NAME, STRING)
VALUES('TEST111','2,3,4'),
('TEST222','6,7'),
('TEST222',null)
--方法1:使用游标,逐行拆分后拼接(略)
--方法2:使用APPLY进行逐行运算
--根据某列一行变多行,并保留其他列的对应关系
SELECT C.NAME, A.Value
FROM #TMP C
CROSS APPLY dbo.SplitString(C.STRING,',',1) A --去除NULL列
SELECT C.NAME, A.Value
FROM #TMP C
OUTER APPLY dbo.SplitString(C.STRING,',