DROP FUNCTION CSV2IntTable GO CREATE FUNCTION CSV2IntTable (@CVS as varchar(max)) RETURNS @intTable TABLE (val int) AS BEGIN declare @pointer1 int declare @pointer2 int declare @value varchar(10) declare @hasNext int SET @pointer1 = 0 SET @pointer2 = 0 SET @hasNext = 1 /*SET @pointer2 = CHARINDEX(',', @CVS, 0) SET @value = substring(@CVS, @pointer1, @pointer2) */ WHILE(@hasNext>0) BEGIN SET @pointer1 = @pointer2+1 SET @pointer2 = CHARINDEX(',', @CVS, @pointer1) if @pointer2 > 0 begin SET @value = cast(substring(@CVS, @pointer1, @pointer2-@pointer1)as int) end else begin SET @value = cast(substring(@CVS, @pointer1, len(@CVS)) as int) SET @hasNext=0 end INSERT INTO @intTable (val) values (@value); END RETURN end GO SELECT * FROM CSV2IntTable('1234,23456,34233,35235');