How to fix the database does not exist error in sp_MSforeachdb ? With MS SQL Server, when using the sp_MSforeachdb system stored procedure, the system displays this error “Database does not exist. Make sure that the name is entered correctly.”. But only in specific cases and for certain databases.
The stored procedure displays the error because the database tries to access a database that does not exist in your SQL Server instance. So it’s obviously not visible in the database list using SSMS. But somehow it appears in the list with the query execution.
SQL Server database does not exist error after running the exec sp_MSforeachdb query
The full error message is displayed with the use of EXEC sp_msforeachdb, the details are as follows: “The database does not exist.” Make sure the name is entered correctly.”
This issue is a classical issue with the naming of the database. There is no error in the sp_MSforeachdb system stored procedure nor in the sys.sp_MSforeach_worker.
The solution is to check the names and rename the databases by replacing special characters.
If the SQL Server database names contain spaces or dashes, you can simply rename them or replace the characters with an underscore. Here is a T-SQL script example to rename a SQL Server database. To be adapted to your specific scenario:
USE [master] GO ALTER DATABASE [database name is-not-good] MODIFY NAME = Database_name_is_good_now; GO
Finally, do not use dashes and spaces in database names. It is technically possible to use them, but to use the system’s stored procedures, it is better to use only underscore characters.
Or better still, don’t use any special characters in the names of your database objects.
Using undocumented Microsoft system procedures
Another way to avoid the MS SQL Database does not exist error in sp_MSforeachdb, is to follow the best practice. Note that Microsoft strongly recommends not using these undocumented procedures in a Production environment. Indeed sp_msforeachdb is an undocumented system stored procedure and therefore not officially supported. The alternative solution is to use a loop on the name in a stored procedure.
Finally, here is another article on how to handle the Invalid Object Name error with CTE SQL Server.