Bonjour

J'ai récupéré sur le net une fonction SQL qui permet de faire un split d'une chaine de caractère et de renvoyer une table d'entier (la chaine doit être composé de nombres séparés par n'importe quel caractère)
Voici la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ALTER FUNCTION [dbo].[SPLIT_ICSV]( 
    @CSV_TEXT VARCHAR(MAX),  -- liste CSV
    @SEP CHAR(1)            -- caractère de délimitation
) RETURNS @Items TABLE (Item INTEGER)
 
BEGIN
   DECLARE @Item VARCHAR(11)
   WHILE CHARINDEX(@SEP, @CSV_TEXT, 0) <> 0 BEGIN
        SELECT @Item=SUBSTRING(@CSV_TEXT,1,CHARINDEX(@SEP,@CSV_TEXT, 0)-1), 
               @CSV_TEXT=SUBSTRING(@CSV_TEXT,CHARINDEX(@SEP,@CSV_TEXT, 0) + LEN(@SEP), LEN(@CSV_TEXT))
        IF LEN(RTRIM(@Item)) > 0
            INSERT INTO @Items SELECT CONVERT(INTEGER, @Item)
   END
   -- Dernier item de la liste
   IF LEN(RTRIM(@CSV_TEXT)) > 0
       INSERT INTO @Items SELECT CONVERT(INTEGER, @CSV_TEXT)
   RETURN
END
Et voici comment je la teste:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ALTER PROCEDURE [dbo].[SPLIT_TEST]
AS
BEGIN
 
	SELECT Item FROM dbo.SPLIT_ICSV('1 2 3 4', ' ')
 
	IF @@ERROR <> 0
	BEGIN
	    RETURN 0
	END
	ELSE
	BEGIN
		RETURN 1
	END
END
La boucle WHILE doit être infinie car la fonction arrive au timeout et ne renvoie rien.

Quelqu'un à une idée ?
Merci