Rename column SQL Server 2008

SqlSql ServerSql Server-2008Alter Table

Sql Problem Overview


I am using SQL Server 2008 and Navicat. I need to rename a column in a table using SQL.

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

This statement doesn't work.

Sql Solutions


Solution 1 - Sql

Use sp_rename

EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'

See: SQL SERVER – How to Rename a Column Name or Table Name

Documentation: sp_rename (Transact-SQL)

For your case it would be:

EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'

Remember to use single quotes to enclose your values.

Solution 2 - Sql

Alternatively to SQL, you can do this in Microsoft SQL Server Management Studio. Here are a few quick ways using the GUI:

First Way

Slow double-click on the column. The column name will become an editable text box.


Second Way

Right click on column and choose Rename from the context menu.

For example:

To Rename column name


Third Way

This way is preferable for when you need to rename multiple columns in one go.

  1. Right-click on the table that contains the column that needs renaming.
  2. Click Design.
  3. In the table design panel, click and edit the textbox of the column name you want to alter.

For example: MSSMS Table Design Example

NOTE: I know OP specifically asked for SQL solution, thought this might help others :)

Solution 3 - Sql

Try:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'

Solution 4 - Sql

You should also specify the schema of the table or you might get this error:

> Msg 15248, Level 11, State 1, Procedure sp_rename, Line 238 Either the > parameter @objname is ambiguous or the claimed @objtype (COLUMN) is > wrong.

If it is a deployment script I would also recommend adding some additional security to it.

IF EXISTS (
		SELECT 1
		FROM sys.columns
		WHERE
			name = 'OldColumnName' AND
			object_name(object_id) = 'TableName'
	) AND
	NOT EXISTS (
		SELECT 1
		FROM sys.columns
		WHERE
			name = 'NewColumnName' AND
			object_name(object_id) = 'TableName'
	)
    EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';

Solution 5 - Sql

You can use sp_rename to rename a column.

USE YourDatabase;  
GO  
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
GO  

The first parameter is the object to be modified, the second parameter is the new name that will be given to the object, and the third parameter COLUMN informs the server that the rename is for the column, and can also be used to rename tables, index and alias data type.

Solution 6 - Sql

Since I often come here and then wondering how to use the brackets, this answer might be useful for those like me.

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • The OldColumnName must not be in []. It will not work.
  • Don't put NewColumnName into [], it will result into [[NewColumnName]].

Solution 7 - Sql

It would be a good suggestion to use an already built-in function but another way around is to:

  1. Create a new column with same data type and NEW NAME.
  2. Run an UPDATE/INSERT statement to copy all the data into new column.
  3. Drop the old column.

The benefit behind using the sp_rename is that it takes care of all the relations associated with it.

From the documentation:

> sp_rename automatically renames the associated index whenever a PRIMARY KEY or UNIQUE constraint is renamed. If a renamed index is tied to a PRIMARY KEY constraint, the PRIMARY KEY constraint is also automatically renamed by sp_rename. sp_rename can be used to rename primary and secondary XML indexes.

Solution 8 - Sql

Sql Server management studio has some system defined Stored Procedures(SP)
One of which is used to rename a column.The SP is sp_rename

Syntax: sp_rename '[table_name].old_column_name', 'new_column_name'
For further help refer this article: sp_rename by Microsoft Docs

Note: On execution of this SP the sql server will give you a caution message as 'Caution: Changing any part of an object name could break scripts and stored procedures'.This is critical only if you have written your own sp which involves the column in the table you are about to change.

Solution 9 - Sql

Improved version of @Taher

DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @OldColumnName AS VARCHAR(128)
DECLARE @NewColumnName AS VARCHAR(128)
DECLARE @ParamValue AS VARCHAR(1000)

SET @SchemaName = 'dbo'
SET @TableName = 'tableName'
SET @OldColumnName = 'OldColumnName'
SET @NewColumnName = 'NewColumnName'
SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName

IF EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @OldColumnName AND OBJECT_NAME(object_id) = @TableName
)
AND NOT EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @NewColumnName AND OBJECT_NAME(object_id) = @TableName
)
BEGIN
    EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END

Solution 10 - Sql

Or you could just slow-click twice on the column in SQL Management Studio and rename it through the UI...

Solution 11 - Sql

Run Query:

    SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSerhio g. LazinView Question on Stackoverflow
Solution 1 - SqlHabibView Answer on Stackoverflow
Solution 2 - SqlCarrie KendallView Answer on Stackoverflow
Solution 3 - SqlTechDoView Answer on Stackoverflow
Solution 4 - SqlTaherView Answer on Stackoverflow
Solution 5 - SqlAlexandre NeukirchenView Answer on Stackoverflow
Solution 6 - SqlHonzaBView Answer on Stackoverflow
Solution 7 - SqlNeverHopelessView Answer on Stackoverflow
Solution 8 - SqlTahir77667View Answer on Stackoverflow
Solution 9 - SqlRikin PatelView Answer on Stackoverflow
Solution 10 - SqlDave ColeView Answer on Stackoverflow
Solution 11 - SqlPurnima BhatiaView Answer on Stackoverflow