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 :

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
'
Je reçois l'erreur suivante :

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.
Et je sais pourquoi. C'est parce que la fameuse base de donnée s'appelle en fait....

SharePoint_AdminContent_85aa6f06-e999-4873-9740-cab270a17bc2
La procédure stockée "sp_MSForEachdb" ne semble pas bien digérer le tiret...

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...

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
'
mais je reçois toujours la même erreur.

Merci pour votre aide !