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
Partager