My recommend is use only set-based techniques instead of multi-statement TVF.First of all, you need to create auxiliary sequence number table and publishing some integers on it.Second you can create a set-base approach for parsing the string.--TVF for publishing and returning sequence numbers CREATE FUNCTION dbo.Numbers (@N INT) RETURNS TABLE AS RETURN (WITH RecCTE (nbr) AS (SELECT 1 UNION ALL SELECT nbr + 1 FROM RecCTE WHERE nbr < 100), Nums (nbr) AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) FROM RecCTE AS C1 CROSS APPLY RecCTE AS C2 CROSS APPLY RecCTE AS C3) SELECT nbr FROM Nums WHERE nbr <= @N); GO --Creating Number Table using TVF SELECT n.nbr INTO Nums FROM dbo.Numbers(10000) AS n; GO --TVF for Splitting the String CREATE FUNCTION dbo.splitter (@S VARCHAR(MAX), @D CHAR(1)) RETURNS TABLE AS RETURN (SELECT CASE WHEN CHARINDEX(@D, @S + @D, nbr) - nbr = 0 THEN '' ELSE SUBSTRING(@S, nbr, CHARINDEX(@D, @S + @D, nbr) - nbr) END AS Word, nbr FROM Nums WHERE nbr <= LEN(@S) AND SUBSTRING(@D + @S, nbr, 1) =@D); GO
For using my approch just try it:SELECT * FROM dbo.splitter ('1,2,3,4,5',',') ;Also, an excellent article about splitting a string has written.http://www.sqlservercentral.com/articles/Advanced+Querying/2547/Have a nice vacation! Peso
______________________