Bonjour à tous et à toutes!

Objectif: J'effectue une requête, dont le résultat est parcouru par un curseur qui lui même construit une chaîne. Ma procédure doit retourner cette chaine.

Problème: Mes variables ne gardent pas leurs valeurs lors du fetch.


Voici ma procédure stockée en T-SQL:

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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
ALTER PROCEDURE [dbo].[ACFY_GetCurseurText]
 
AS
 
BEGIN
	-- Déclaration du curseur
	DECLARE K CURSOR FOR
		SELECT adhnom, adhnum, ouvnum, ouvtit
		FROM adherents, emprunts, ouvrages
		WHERE adhnum = eadhnum
			AND ouvnum = eouvnum
		ORDER BYadhnum
 
	-- Déclaration des variables et de la table temporaire
	DECLARE @ChaineHTML varchar (8000)
	DECLARE @adhnom nvarchar (200)
	DECLARE @adhnum int
	DECLARE @adhnum2 int
	DECLARE @ouvnum int
        DECLARE @ouvtit nvarchar (200)
 
	OPEN K
 
	--Lecture du premier enregistrement
	FETCH K
		INTO @adhnom, @adhnum, @ouvnum, @ouvtit
 
	-- Boucle de traitement
	WHILE (@@FETCH_STATUS <> -1)
	BEGIN
		IF @ChaineHTML IS NULL
			BEGIN
				SET @ChaineHTML = CONVERT(nvarchar (200),''+@adhnom+' : <BR>'+@ouvtit+'')
				SET @adhnum2 = @adhnum
			END
		ELSE
			BEGIN
				IF @adhnum = @adhnum2
					BEGIN
						SET @ChaineHTML = CONVERT(nvarchar (200),''+@ChaineHTML+'<BR>'+@ouvtit+'')
					END
				ELSE
					BEGIN
						SET @ChaineHTML = CONVERT(nvarchar (200),''+@ChaineHTML+'<BR>'+@adhnom+'<BR>'+@ouvtit+'')
						SET @adhnum2 = @adhnum
					END
			END
		-- Lecture de l'enregistrement suivant
		FETCH K
			]INTO @adhnom, @adhnum, @ouvnum, @ouvtit
	END
 
	-- Fermeture du curseur
	CLOSE K
	DEALLOCATE K
	RETURN(@ChaineHTML)
 
END

Quelqu'un aurait-il une idée du pourquoi ce résultat? Et si possible une solution à mon problème?