Rename a database


June 15, 2015 by Kenneth Fisher

Renaming a database isn’t something you do frequently but it does have bit of a gotcha. First of all let’s go over how you actually rename the database. It’s pretty simple.

Right click on the database name in the object explorer and select rename or highlight the name and hit F2. Then type over the old name with the new one.



Personally I find the code a little bit odd since for the most part when modifying a database using ALTER DATABASE you use the SET keyword not MODIFY but it’s not all that big a deal.

So here is where the gotcha comes in. Let’s say you create a database in your test environment called Application_Dev.


Once you are done you decide to back it up and restore it to your test environment. Once the database is in the new environment you rename it to Application_Test. And so on.

Side note here.

  1. I don’t recommend the practice of naming your databases _dev, _test etc. It does make you a little less likely to run code in the wrong environment but it becomes a real problem if you ever need to reference something using a three or four part name. Application_Dev.dbo.table for example. You will have to modify your code in each environment and in general I want every piece of code to be identical between environments if at all possible.
  2. Backing up and restoring to different environments is handy and I will frequently use for the initial move of a database between SDLC stacks. After that first move however, I recommend using a version control tool, a comparison tool or scripting even though your database may not be live yet. It’s to easy to forget minor differences (particularly in data) between the different databases and that can cause you some problems.

Some time later one of your co-workers is looking at the database files for Application_Prod and notes that the files are named Application_Dev.mdf and Application_Dev_log.ldf. Your co-worker is either going to be very confused, and possibly concerned that the database isn’t correct or amused by the disconnect of the difference between the database name and the file names. Also if the difference is big enough (say the file names are POC.mdf and POC.ldf this could cause a problem for someone looking in the data directory and not through SSMS.

In case you were interested you can rename the files too but it isn’t nearly as simple of a process. There may be an easier way to do this but I haven’t been able to find it.

First you rename the files within SQL.

	NAME = LogicalFileName, 
	FILENAME = 'NewPath\NewFileName'
	-- For example : 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014CI\MSSQL\DATA\NewMDFName.mdf'

Then you have to detach your database

USE master
EXEC sp_detach_db 'DBName';

Then rename your file in the file system and attach it.

USE master
EXEC sp_attach_db 'Test',

I’m not really a fan of detaching and re-attaching a database but in this case it appears to be the only way. Oh, and last but not least changing the logical name of the files just to be consistent.

	NAME = OldLogicalName, 
	NEWNAME = NewLogicalName

3 thoughts on “Rename a database

  1. I often still use sp_renamedb but that is deprecated so I should stop.

  2. […] Doesn’t Carry Forward Using SELECT INTO See Two Queries at Once in SSMS Adventures with NOLOCK Rename a database Stop Thinking Big Data, Start Thinking Smart Data Temporal data support in SQL Server 2016 – Part […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 3,755 other subscribers

Follow me on Twitter

ToadWorld Pro of the Month November 2013
%d bloggers like this: