SQL Server 2005 以上版本使用 CTE 分割字符串

ALTER FUNCTION [dbo].[UF_SpliteIntToTable] 
( 
    @String VARCHAR(8000) 
) 
RETURNS @Table TABLE (Id INT) 
AS 
BEGIN 
    DECLARE @SpliteChar AS CHAR(1) = ','; 
         
    WITH TempTable AS 
    ( 
        SELECT CAST(SUBSTRING(@String,1,CHARINDEX(@SpliteChar,@String,1) - 1) AS INT) AS item, 
        SUBSTRING(@String,CHARINDEX(@SpliteChar,@String,1) + 1, LEN(@String)) + @SpliteChar AS list 
 
        UNION ALL 
 
        SELECT CAST(SUBSTRING(list,1,CHARINDEX(@SpliteChar,list,1) - 1) AS INT) AS item, 
        SUBSTRING(list,CHARINDEX(@SpliteChar,list,1) + 1, LEN(list)) AS list 
        FROM TempTable 
        WHERE LEN(TempTable.list) > 0 
    ) 
 
    INSERT INTO @Table SELECT item FROM TempTable WHERE item > 0 
         
    RETURN 
END