Bonjour à tous,
j'ai créé la requête suivante pour balayer une liste de schémas de ma base de données et renvoyer la liste des objets modifiés de chaque schéma pour une date donnée.
J'initialise une variable @schema avec un CURSOR sur le SELECT de SYSDATABASES pour récupérer les noms de mes schémas puis je l'utilise dans une boucle WHILE pour rechercher mes objets modifiés en faisant un USE @schema pour me placer sur le bon.
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 DECLARE schcsr cursor for select name from master..sysdatabases where name like 'A%' or name like 'D%' go set nocount on DECLARE @schema varchar(10) DECLARE @DATE DATETIME SELECT @DATE='2013/01/01' open schcsr fetch schcsr into @schema while @@sqlstatus = 0 begin USE @schema SELECT @schema AS 'Base' SELECT name, type, crdate, expdate FROM sysobjects WHERE crdate >= @DATE OR expdate >= @DATE ORDER BY expdate fetch schcsr into @schema end close schcsr deallocate cursor schcsr go
La requête fonctionne, je n'ai aucune erreur, SELECT @schema m'affiche bien successivement ma 30aine de schémas
MAIS.... La requête sur SYSOBJECTS m'affiche 30 fois me même résultat!!!
Je m'explique:
- Si, pour une date donnée, le premier schéma traité par la requête contient des objets modifiés, j'aurais cet objet modifié pour tous les schémas.
- Si, pour une autre date, je n'ai pas d'objets modifiés pour le premier schéma, tous les schémas apparaitront non modifiés.
- Or je sais que certains ont des tables ou des vues modifiées à certaines dates et d'autres à d'autres dates.
Il y a donc un Hic!. Je ne peux pas faire de COMMIT (GO) dans un Begin/ End pour être sûr que le USE soit bien pris en compte et la syntaxe FROM @schema..sysobjects n'est pas autorisée que je sache.
Quelqu'un a-t-il une idée? Merci beaucoup pour votre aide.
Partager