La base de données n’existe pas avec exec sp_MSforeachdb

Comment éviter l’erreur SQL Server avec la procédure stockée système sp_MSforeachdb : « La base de données n’existe pas. Assurez-vous que le nom est saisi correctement. ».

La procédure stockée affiche l’erreur parce que la base de données essaie d’accéder à une base de données qui n’existe pas dans votre instance SQL Server. Donc elle n’est évidemment pas visible dans la liste des bases de données en utilisant SSMS. Mais d’une manière ou d’une autre, elle apparaît dans la liste avec l’exécution de la requête.

Erreur SQL Server La base de données n’existe pas avec Exec sp_MSforeachdb

Le message d’erreur complet est affiché avec l’utilisation de EXEC sp_msforeachdb, le détail est le suivant:

« La base de données n’existe pas. » Assurez-vous que le nom est entré correctement. »

Cette erreur est un problème classique de nommage de la base de données. Il n’y a pas d’erreur dans la procédure stockée système sp_MSforeachdb ni dans la deuxième procédure sys.sp_MSforeach_worker.

La solution est de vérifier et renommer les bases de données

Si les noms des bases de données SQL Server contiennent des espaces ou des tirets, vous pouvez simplement les renommer ou remplacer les caractères par un trait de soulignement. Voici un script T-SQL pour renommer une base de données SQL Server :

USE [master]
GO

ALTER DATABASE [nom de la base de données is-not-good] MODIFY NAME = Database_name_is_good_now ;
GO

Pour conclure, ne pas utiliser le tiret et l’espace dans les noms de bases de données. Il est techniquement possible de les utiliser, mais pour utiliser les procédures stockées du système, il est préférable d’utiliser uniquement des caractères underscore, ou tirer bas en Français. Ou mieux encore, n’utilisez aucun caractère spécial dans les noms des objets de votre base de données.

Utilisation des procédures SQL Server non documentées

Noter que Microsoft recommande fortement de ne pas utiliser ces procédures non documentées en environnement de Production. En effet sp_msforeachdb est une procédure stockée système non documentée et donc non supportée officiellement. La solution alternative est d’utiliser une boucle sur le nom dans une procédure stockée.

Voici enfin un autre article pour gérer l’erreur Nom d’objet non valide avec CTE SQL Server.