I find the below faster on 2005.
[font="Courier New"]
CREATE FUNCTION [Strings].[fnStringSplit_2005_Distinct_CHAR]
(
@SourceString VARCHAR(MAX)
)
/*======================================================================================
'P System : Multiple
'P Subsystem : Common Functions
'P Script : fnSMS_StringSplit_2005
'P Creation date : 15/10/2010
'P
'P Description : Splits a Comma Delimited String Into a Table. Join as a Table
'P
'P SELECT * FROM Strings.fnStringSplit_2005_Distinct_CHAR('9,8,7,6,5,4,3,2,1,')
'P
'P Parameters----------------------------------------------------------------------
'P Inputs : @SourceString - Comma delimited string
'P Outputs : table variable
'P====================================================================================*/
RETURNS @Values TABLE
(
--POSITION INT IDENTITY,
VALUE VARCHAR(255) COLLATE SQL_Latin1_General_CP1_CI_AS
PRIMARY KEY ([VALUE])
)
AS
BEGIN
DECLARE @vchString VARCHAR(MAX)
DECLARE @xmlString XML
BEGIN
SET @vchString = @SourceString
IF RIGHT(@vchString,1) = ','
SET @vchString = LEFT(@vchString, LEN(@vchString)-1)
/*------------------------------------------
| Convert the string to xml
'-----------------------------------------*/
SET @xmlString = CAST('<i>' + REPLACE(@vchString, ',', '</i><i>') + '</i>' AS XML)
/*------------------------------------------
| Read xml into a table variable
'-----------------------------------------*/
INSERT INTO @Values(VALUE)
SELECT DISTINCT x.i.value('.', 'VARCHAR(255)') AS Item
FROM @xmlString.nodes('//i') x(i)
END
RETURN
END
/*---------------------------------------------------------------------------------------
|--------------------------- End of common function -----------------------------|
|--------------------------------------------------------------------------------------*/[/font]
Cheap toilet paper is a false economy, beware!