How do I swap column values in sql server 2008?

SqlSql ServerSql Server-2008

Sql Problem Overview


I have a table called Employee

 Eno     ename     AttributeValue      AttributeName  
 1       aa           a123             abc
 2       bbb          b123             dcf
 3       cc           c7sd             wew3

I want to swap the data from column AttributeValue to AttributeName and AttributeName to AttributeValue

For Example:

Eno     ename     AttributeValue   AttributeName  
1       aa        abc              a123
2       bbb       dcf              b123
3       cc        wew3             c7sd

Sql Solutions


Solution 1 - Sql

UPDATE employee
SET AttributeValue = AttributeName, 
    AttributeName = AttributeValue

However, unless both columns have the exact same definition, you risk losing information.

Solution 2 - Sql

Update employee
Set attributeValue = attributeName,
    attributeName = attributeValue

Solution 3 - Sql

update Employee set AttributeValue = AttributeName, AttributeName = AttributeValue

Solution 4 - Sql

All the previous techniques are slow for big tables they move data instead of renaming columns, this is a simple solution:

ALTER TABLE "amplitude"
RENAME COLUMN "start_hour_displayed" TO "temp";

ALTER TABLE "amplitude"
RENAME COLUMN "start_hour" TO "start_hour_displayed";

ALTER TABLE "amplitude"
RENAME COLUMN "temp" TO "start_hour";

If you have views of functions linked you have to backup them before and restore them after.

Solution 5 - Sql

This is really good example

SELECT * from employees;
Go

DECLARE @temp as varchar(20)
update employees
set    @temp = fname,
       fname = lname,
       lname = @temp
WHERE  deptno = 10;
GO

SELECT * from employees;

Result

Solution 6 - Sql

Declare @myTable Table (id int, first_name varchar(50), last_name varchar(50));

Select * from Student

Insert Into @myTable (id, first_name, last_name) Select id, last_name, first_name from Student

    MERGE
    INTO    Student std
    USING @myTable tmp
    ON std.id = tmp.id
    WHEN MATCHED THEN
    UPDATE
    SET std.first_name = tmp.first_name,
    std.last_name = tmp.last_name;

Select * from Student

Output

Query Result Screenshot

Solution 7 - Sql

Just swap both columns in a single update:

Update registration
Set AttributeName = AttributeValue ,
    AttributeValue = AttributeName where id in (1,2,3)

Solution 8 - Sql

UPDATE employee SET AttributeValue = AttributeName, AttributeName = AttributeValue its not correct better to create one temp column and try the code UPDATE employee SET temp= AttributeName then again UPDATE employee SET AttributeName = AttributeValuee again

UPDATE employee SET AttributeValuee= temp

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
QuestionjayView Question on Stackoverflow
Solution 1 - SqlOdedView Answer on Stackoverflow
Solution 2 - SqlJohn HartsockView Answer on Stackoverflow
Solution 3 - SqlGendoIkariView Answer on Stackoverflow
Solution 4 - SqlbormatView Answer on Stackoverflow
Solution 5 - SqlMind PeaceView Answer on Stackoverflow
Solution 6 - SqlArpit TrivediView Answer on Stackoverflow
Solution 7 - SqlDinesh Kumar SharmaView Answer on Stackoverflow
Solution 8 - SqlTannView Answer on Stackoverflow