Bonjour,
Ce qui suit se fait exécuter avec SQL Server 2005 (9.0.3050)
J'aimerais lister tous les users de chacune des bases de données avec leur database role membership. J'utilise donc la procedure stockée "sp_MSForEachdb".
Le code suivant fonctionne bien sur certain serveur SQL mais pas sur celui-ci, à cause du nom d'une des bases de données :
Je reçois l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 EXEC sp_MSForEachdb 'USE ? select ''?'' as DBName, a.name, c.name from ?.dbo.sysusers a join ?.dbo.sysmembers b on (a.uid = b.memberuid) join ?.dbo.sysusers c on (b.groupuid = c.uid) order by 1 '
Et je sais pourquoi. C'est parce que la fameuse base de donnée s'appelle en fait....Msg 911, Level 16, State 1, Line 1
Could not locate entry in sysdatabases for database 'SharePoint_AdminContent_85aa6f06'. No entry found with that name. Make sure that the name is entered correctly.
La procédure stockée "sp_MSForEachdb" ne semble pas bien digérer le tiret...SharePoint_AdminContent_85aa6f06-e999-4873-9740-cab270a17bc2
Comment puis-je faire pour contourner ce problème?
J'ai essayé d'ajouter if db_id(''?'') <> 24, 24 étant le numéro de la base de donnée en question...
mais je reçois toujours la même erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 EXEC sp_MSForEachdb 'USE ? if db_id(''?'') <> 24 select ''?'' as DBName, a.name, c.name from ?.dbo.sysusers a join ?.dbo.sysmembers b on (a.uid = b.memberuid) join ?.dbo.sysusers c on (b.groupuid = c.uid) order by 1 '
Merci pour votre aide !![]()
Partager