Bonjour à tous,

J'ai une table sql qui contient 2 champs :
ID int
ADRESSE varchar(MAX)

le champ ADRESSE contient des adresses mails séparées par des ; (en nombre variable et de longueur variable)

Je cherche désespérément à faire une requête qui m'extrait les adresses mails exploitables :

exemple de contenu de ma table :
1 toto@yahoo.fr;titi@gmail.fr;tata@yahoo.fr
2 tutu@gmail.fr;toto@yahoo.fr
...

résultat escompté :
1 toto@yahoo.fr
1 titi@gmail.fr
1 tata@yahoo.fr
2 tutu@gmail.fr
2 toto@yahoo.fr

j'ai bien trouvé sur le net un exemple de fonction qui split un champ mais je n'arrive à le faire fonctionner que sur une ligne de la manière suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
declare @des varchar(max) = (SELECT top 1 [ADRESSE] FROM matable)
     SELECT * FROM fctSplitToChar(@des, ';')
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 [fctSplitToChar]( 
    @DelimitedText VARCHAR(MAX),  -- liste CSV
    @QuoteChar CHAR(1)            -- caractère de délimitation
) RETURNS @Items TABLE (Item VARCHAR(MAX))
 
BEGIN
   DECLARE @Item VARCHAR(MAX)
   WHILE CHARINDEX(@QuoteChar, @DelimitedText, 0) <> 0 BEGIN
        SELECT @Item=SUBSTRING(@DelimitedText,1,CHARINDEX(@QuoteChar,@DelimitedText, 0)-1), 
               @DelimitedText=SUBSTRING(@DelimitedText,CHARINDEX(@QuoteChar,@DelimitedText, 0) + LEN(@QuoteChar), LEN(@DelimitedText))
        IF LEN(RTRIM(@Item)) > 0
            INSERT INTO @Items SELECT CONVERT(VARCHAR, @Item)
   END
   -- Dernier item de la liste
   IF LEN(RTRIM(@DelimitedText)) > 0
       INSERT INTO @Items SELECT CONVERT(VARCHAR, @DelimitedText)
   RETURN
END
impossible de la faire fonctionner dans une requête sur l'ensemble des lignes de ma table, j'ai essayé la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT a.ID, b.Item
FROM     matable a
CROSS    APPLY fctSplitToChar(a.ADRESSE, ';') AS b
mais ça me renvoie une erreur Syntaxe incorrecte vers '.'.

Merci d'avance de vos réponses.