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 :
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
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
La boucle WHILE doit être infinie car la fonction arrive au timeout et ne renvoie rien.
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
Quelqu'un à une idée ?
Merci
Partager