[SQL 2005] Curseurs imbriqués
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:
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 |