Worked for me. What was your test to break it?
>Hi Charles,
>
>Here is an interesting and fast variation of the split function
>
>CREATE FUNCTION [dbo].[Split](
> @List VARCHAR(8000),
> @Del VARCHAR(1)
>) RETURNS TABLE
>AS
>RETURN (
> WITH Tokens AS (
> SELECT
> StartPos = 1,
> EndPos = CHARINDEX(@Del, @List COLLATE Latin1_General_BIN2 +@del)
> UNION ALL
> SELECT
> EndPos + 1,
> CHARINDEX(@Del, @List COLLATE Latin1_General_BIN2 + @del, EndPos + 1)
> FROM Tokens
> WHERE EndPos > 0
> )
> SELECT
> SUBSTRING(@List, StartPos, EndPos - StartPos) as value
> FROM Tokens
> WHERE EndPos <> 0
>)
>
>
>See
http://forums.asp.net/p/1476140/3433391.aspx#3433391>
>
>>Struggling with t-SQL syntax to get a set of record by passing in a string built in vb .net from a list of primary keys. Need 2 versions - one for integer keys, one for guid / uid keys
>>- I can be flexible about what and how I pass the params
>>I understand t-sql does not actually have arrays so my first instinct is to pass in a string with the guids delimited with ' and separated with a comma and see if the pk is in the "list" of the string.
>>
>>But that won't work with
>>
>>select * from members where cpk in (@pklist)
>>
>>if I leave out the delimeters and have a single string with single quotes surrounding it the above select works but only pulls the first record
>>
>>Integers an even bigger disaster as they a string values and the above code doesn't cast them
>>
>>Plan B would be to build a table from the incoming param string and join against that to get the recordset but the syntax for that is beyond my t-sql skills
>>
>>Have a feeling somebody has the answer to this
>>
>>Guidance appreciated
>>
>>TIA
If it's not broken, fix it until it is.
My Blog