Cela permet donc, par exemple, de prendre un paramètre dans une procédure stockée de type "varchar(MAX)" comportant une chaîne de caractères avec des valeurs séparées par une virgule, et de découper chacune de ces valeurs pour les utiliser dans une liste "IN ( )" d'une clause "WHERE".
Voici le code de la fonction :
CREATE FUNCTION SplitVoici maintenant le code d'un exemple d'utilisation de cette fonction :
(
@Delimiter varchar(5),
@List varchar(MAX)
)
RETURNS @TableOfValues table
(
RowID int IDENTITY(1,1),
[Value] varchar(MAX)
)
AS
BEGIN
DECLARE @LenString int
SET @List = LTRIM(RTRIM(@List))
WHILE LEN(@List) > 0
BEGIN
SELECT @LenString =
(CASE CHARINDEX(@Delimiter, @List)
WHEN 0 THEN LEN(@List)
ELSE (CHARINDEX(@Delimiter, @List) - 1)
END)
INSERT INTO @TableOfValues
SELECT SUBSTRING(@List, 1, @LenString)
SELECT @List =
(CASE (LEN(@List) - @LenString)
WHEN 0 THEN ''
ELSE RIGHT(@List, LEN(@List) - @LenString - 1)
END)
END
RETURN
END
DECLARE @Table table
(
TableID int
)
INSERT INTO @Table VALUES ('12'),('34'),('56'),('78'),('90')
DECLARE @List varchar(MAX)
SET @List = '12,34,56,78,90'
SELECT * FROM @Table
WHERE TableID IN (SELECT CAST(Value AS int) FROM Split(',', @List))