Declare @text varchar(8000)Set @text = ',' + @parameter + ','
Select Substring(',' + @text + ',', N+1, Charindex(',', ',' + @text + ',', N+1) - n -1)From tallyWhere N <= Len(',' + @text + ',') AND SUBSTRING(',' + @text + ',', N,1) = ',' And Charindex(',', ',' + @text + ',', N+1) > 0order by n
CREATE PROCEDURE proc_Function_Explode_New (@Delimiter CHAR(1), @String TEXT)ASSELECT CASE WHEN PATINDEX('%'+@Delimiter+'%', SUBSTRING(@String, number+1, 12)) > 0 THEN SUBSTRING(@String, CASE number WHEN 1 THEN 1 ELSE number+1 END, PATINDEX('%'+@Delimiter+'%', SUBSTRING(@String, CASE number WHEN 1 THEN 1 ELSE number+1 END, 12))-1) ELSE SUBSTRING(@String, CASE number WHEN 1 THEN 1 ELSE number+1 END, DATALENGTH(SUBSTRING(@String, CASE number WHEN 1 THEN 1 ELSE number+1 END, 12))) ENDFROM Numbers WHERE number <= DATALENGTH(@String) AND (SUBSTRING(@String, number, 1) = @Delimiter OR number = 1)ORDER BY number RETURN
CREATE PROCEDURE [dbo].[MakeNumbersTable] -- Courtesy of Jeff Moden, SSCASIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[Numbers]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) DROP TABLE dbo.Numbers--===== Create and populate the Tally table on the fly SELECT TOP 1000000 IDENTITY(INT,1,1) AS number INTO dbo.Numbers FROM MASTER.dbo.syscolumns sc1, MASTER.dbo.syscolumns sc2--===== Add a Primary Key to maximize performance ALTER TABLE dbo.Numbers ADD CONSTRAINT PK_numbers_number PRIMARY KEY CLUSTERED (number)--===== Allow the general public to use it GRANT SELECT ON dbo.Numbers TO PUBLICGO