We use the above technique ... a LOT. Works great.
======================
As examples, here's a function we built to convert a Comma Separated Value list of integers into a table. We use this silly little function in about 30 stored procs.
======================
ALTER FUNCTION CSVintTOTableOfIDs (@CSVs varchar(8000))
RETURNS @t TABLE(IDs int) AS
BEGIN
DECLARE @pos int, @comma varchar(1)
SET @comma=','
SET @pos=CHARINDEX(@comma,@CSVs)
WHILE @pos>0
BEGIN
INSERT @t values (cast((LEFT(@CSVs, CHARINDEX(@comma, @CSVs) - 1 )) as int))
SET @CSVs = SUBSTRING(@CSVs, CHARINDEX(@comma,@CSVs) + 1, LEN(@CSVs))
SET @pos = CHARINDEX(@comma,@CSVs)
END
IF LEN(@CSVs)>0
BEGIN
INSERT @t(IDs) SELECT @CSVs
END
RETURN
END
======================
And here's an example of how we use it.
======================
CREATE proc SpotsGridForOneClient(@ClientID int, @SpotIdsCSV varchar(300)) as
SELECT
FullName as Facility
FROM
Spots
WHERE
(Spots.ClientID = @ClientID) AND
(SpotTypes.SpotTypeID IN
(SELECT IDs from CSVintTOTableOfIDs(@SpotIdsCSV))
)
======================
Good luck