Bonjour,

Config :
Windows 2003 Server
SQL Server 2005 SP2


Je souhaite utiliser deux curseurs imbriqués. Le premier me retourne une liste de tables, puis le second traite un champ donné pour chacune de ces tables (de même structure). Mais lors de l'exécution, j'obtiens un message d'erreur indiquant que la variable @tbl n'est pas déclarée, alors qu'elle l'est...

Quelqu'un aurait-il une idée ? Ou un autre moyen que les curseurs imbrqués ? J'ai vu qu'on pouvait utiliser une boucle WHILE à la place, mais malgré les exemples, je n'ai pas réussi à la faire fonctionner comme je voulais.

Je ne cherche pas la performance, car c'est pour une tâche administrative ponctuelle.


Code Transact-SQL : 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
DECLARE @tata 	VARCHAR(255)
DECLARE @tbl	VARCHAR(255) -- la fautive
 
 
DECLARE cur_tables CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%pattern%'
 
OPEN cur_tables
	FETCH NEXT FROM cur_tables INTO @tbl
	WHILE @@FETCH_STATUS = 0
	BEGIN
		DECLARE cur_toto CURSOR FOR
		SELECT chp FROM @tbl WHERE chp LIKE '%titi%' -- <--- c'est ici
 
		OPEN cur_toto
			FETCH NEXT FROM cur_toto INTO @tata
			WHILE @@FETCH_STATUS = 0
			BEGIN
				-- diverses actions
			END
		CLOSE cur_toto
		DEALLOCATE cur_toto
		FETCH NEXT FROM cur_tables INTO @tbl
	END
CLOSE cur_tables
DEALLOCATE cur_tables