Tag Archives: Sql

How to rename column name in Sql Server

Many times we come across a scenario where we need to rename / change the existing table column name. We can use the SP_RENAME system stored to change/rename the table column name. In this article we will cover the following:

  1. Rename table column name using SP_Rename system stored procedure
  2. Why SP_RENAME returns the warning: “Caution: Changing any part of an object name could break scripts and stored procedures.” when renaming the column name?
  3. How to rename table column which is enclosed by “[” and “]” (i.e. Square brackets) symbol
  4. How to rename table column which has . (i.e. dot) symbol in the column name
  5. How to rename temporary table column name
  6. How to rename temporary table variable column name

To understand table column rename using SP_RENAME with extensive list of examples, let us first create a Customer table with sample records as depicted in the below image by using the following script:

Rename column name in Sql Server 1
Script:

USE TEMPDB
GO
--Create Customer Table for the Demo
CREATE TABLE dbo.Customer(Id INT, CustName NVARCHAR(50), 
[[PhoneNo]]] VARCHAR(20), [Zip Code] VARCHAR(10), 
[City.Name] VARCHAR(50))
GO
--Add sample records to the Customer table
INSERT INTO dbo.Customer(id, CustName, [[PhoneNo]]],
	[Zip Code], [City.Name])
VALUES(1,'Basavaraj Biradar', '123-123', '560001', 'Bangalore'),
      (2,'Shreeganesh Biradar', '321-321', '560025', 'Mysore')
GO 
--Create Procedure to get all the records from customer table
CREATE PROCEDURE dbo.GetCustomers
AS 
	SELECT id, CustName, [[PhoneNo]]],
		[Zip Code], [City.Name]
	FROM dbo.Customer
GO
--Get customer table data
EXEC dbo.GetCustomers
GO

1. Rename table column name using SP_Rename system stored procedure

Below is the SYNTAX of the SP_RENAME system stored procedure for renaming the column name:

SYNTAX:

SP_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'

Example 1: Rename Customer table column CustName to FullName using SP_RENAME

SP_RENAME 'Customer.CustName' , 'FullName', 'COLUMN'

Result:
Rename column name in Sql Server 2
Below is the pictorial representation of the table column rename using SP_RENAME
Rename column name in Sql Server 3

2) Why SP_RENAME returns the warning: “Caution: Changing any part of an object name could break scripts and stored procedures.” when renaming the column name?

Basically, sql server returns this warning to alert us to update all the places wherever we are referring this column. For example take a scenario where if the old column name is still referred in a stored procedure even after the column rename using sp_rename. In this scenario, the sp will start throwing error post the column rename. To avoid such issues, Sql server alerts us by returning the warning when we use SP_RENAME.

Example:The script at the beginning of this article is creating the stored procedure: GetCustomers and it was working. Now let us verify whether it is still working after renaming the column CustName to FullName by the previous example:

--Get customer table data
EXEC dbo.GetCustomers
GO

RESULT:

Msg 207, Level 16, State 1, Procedure GetCustomers, Line 4
Invalid column name ‘CustName’.

From the above result it is clear that column rename using SP_RENAME will just change the column name in the table. It will to change in all the places, it is developer’s responsibility to update at all the place. Let us modify the GetCustomers stored procedure to reflect the new column name using the below script and then verify the stored procedure execution:

–Modify the stored procedure to refer the new column

ALTER PROCEDURE dbo.GetCustomers
AS 
	SELECT id, FullName, [[PhoneNo]]],
		[Zip Code], [City.Name]
	FROM dbo.Customer
GO
--Now the storde procedure works
EXEC dbo.GetCustomers
GO

RESULT:
Rename column name in Sql Server 5

3. How to rename table column which is enclosed by “[” and “]” (i.e. Square brackets) symbol

Example: The Customer table created at the beginning of this article has a column [PhoneNo]. As Square bracket has special meaning it doesn’t work straight forward. Let us try renaming by the below script:

SP_RENAME 'Customer.[PhoneNo]' , 'PhoneNo', 'COLUMN'
GO

RESULT:

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

The reason for the above error is, sql server treats Customer.[PhoneNo] as Customer.PhoneNo. To solve this issue we have to add two open square brackets at the beginning of PhoneNo column and three closing square brackets at the end of the PhoneNo column as shown below:

SP_RENAME 'Customer.[[PhoneNo]]]' , 'PhoneNo', 'COLUMN'
GO
SELECT * FROM dbo.Customer

RESULT:
Rename column name in Sql Server 6

4. How to rename table column which has . (i.e. dot) symbol in the column name

Example: The Customer table created at the beginning of this article has a column City.Name. This column has . (i.e. dot symbol) in it’s name, let us try renaming by the below script:

SP_RENAME 'Customer.City.Name' , 'City', 'COLUMN'
GO

RESULT:

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

The reason for the above error is, sql server treats Customer.City.Name as three part naming convention and treating City as table name and Name as column name and Customer as Schema. Because of this it is not finding the column name in the table definition and failing to update it. To solve this issue we have to enclose column name within square brackets as shown in the below script:

SP_RENAME 'Customer.[City.Name]' , 'City', 'COLUMN'
GO
SELECT * FROM dbo.Customer

RESULT:
Rename column name in Sql Server 8

5. How to rename temporary table column name

Renaming a temporary table column name is same as that of the regular table column name.

Example: Let us create a temporary table #Customer and insert a record by using the below script

CREATE TABLE #Customer(Id INT)
GO
INSERT INTO #Customer (Id) Values ('100')
GO

Now we can rename the temporary table #Customer column Id name to SlNo using the below script:

SP_RENAME '#Customer.ID' , 'SlNo', 'COLUMN'
GO

Rename column name in Sql Server 9

6. How to rename temporary table variable column name

Sql Server doesn’t support the renaming of the Table Variable column name

Example: Let us verify this behaviour with an example

DECLARE  @Customer TABLE(id INT)
EXEC SP_RENAME '@i.ID' , 'SlNo', 'COLUMN'

RESULT:

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

Rename column name in Sql Server 10

How to get Day or Weekday name from date in Sql Server

Many a times we come across a scenario where we may need to get Day/Weekday name from Date in Sql Server. In this article we will see how we can get Day/Weekday name from Date in Sql Server.

Approach 1: Using DATENAME Function

We can use DATENAME() function to get Day/Weekday name from Date in Sql Server, here we need specify datepart parameter of the DATENAME function as weekday or dw both will return the same result.

SELECT GETDATE() 'Today', DATENAME(weekday,GETDATE()) 'Day Name'
SELECT GetDate() 'Today', DATENAME(dw,GETDATE()) 'Day Name'

RESULT:

Day or weekday name from Date Sql Server 1

Approach 2: Using FORMAT Function

We can aswell use FORMAT function which is introduced in Sql Server 2012 to get Day/Weekday name from Date in Sql Server. It is not an Sql Server native function instead it is .NET CLR dependent function. I would prefer the first approach instead of this approach for getting Day/Weekday name from Date in Sql Server. But FORMAT function provides lot of options compared to DATENAME function. To know more about FORMAT function you may like to go through a detailed article on FORMAT STRING FUNCTION IN SQL SERVER 2012 which I have written couple of years back.

SELECT GETDATE() 'Today', FORMAT(GETDATE(),'dddd') 'Day Name'

RESULT:
Day or weekday name from Date Sql Server 2

How to get month name from date in Sql Server

Many a times we come across a scenario where we may need to get Month name from Date in Sql Server. In this article we will see how we can get Month name from Date in Sql Server.

Approach 1: Using DATENAME Function

We can use DATENAME() function to get Month name from Date in Sql Server, here we need specify datepart parameter of the DATENAME function as month or mm or m all will return the same result.

SELECT GETDATE() 'Today', DATENAME(month,GETDATE()) 'Month Name'
SELECT GetDate() 'Today', DATENAME(mm,GETDATE()) 'Month Name'
SELECT GetDate() 'Today', DATENAME(m,GETDATE()) 'Month Name'

RESULT:
Month name from date in sql server 1

If you need result in different language than the default one, then we need to use the SET LANGUAGE statement to change the Sql Server default language for the current session. Below example shows how we can get the Month name in Russian from Date.

--Change default langauage to Russian for this session
SET LANGUAGE Russian
SELECT DATENAME(mm, GETDATE()) 'Russian Month Name'
--Change the language back to English from Arabic
SET LANGUAGE English
SELECT DATENAME(mm, GETDATE()) 'English Month Name'

RESULT:
Month name from date in sql server 4

The sys.syslanguages catalog view provides the list of languages to which we can change the current sessions language using SET LANGUAGE statement.

Approach 2: Using FORMAT Function

We can aswell use FORMAT function which is introduced in Sql Server 2012 to get Month name from Date in Sql Server. It is not an Sql Server native function instead it is .NET CLR dependent function. I would prefer the first approach instead of this approach for getting Month name from Date in Sql Server. But FORMAT function provides lot of options compared to DATENAME function. To know more on FORMAT function you may like to go through a detailed article on FORMAT STRING FUNCTION IN SQL SERVER 2012 which I have written couple of years back.

SELECT GETDATE() 'Today', FORMAT(GETDATE(),'MMMM') 'Month Name'

RESULT
Month name from date in sql server 2