Как поменять значения столбцов в SQL Server 2008? - PullRequest
55 голосов
/ 16 ноября 2010

У меня есть таблица с именем Employee

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

Я хочу обменять данные из столбца AttributeValue на AttributeName и AttributeName на AttributeValue

Например:

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

Ответы [ 8 ]

89 голосов
/ 16 ноября 2010
UPDATE employee
SET AttributeValue = AttributeName, 
    AttributeName = AttributeValue

Однако, если оба столбца не имеют одинакового определения, вы рискуете потерять информацию.

13 голосов
/ 16 ноября 2010
Update employee
Set attributeValue = attributeName,
    attributeName = attributeValue
5 голосов
/ 16 ноября 2010

update Employee set AttributeValue = AttributeName, AttributeName = AttributeValue

3 голосов
/ 07 октября 2014

Это действительно хороший пример

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

2 голосов
/ 02 мая 2018

Все предыдущие методы медленны для большой таблицы, они перемещают дату вместо переименования столбцов, это простое решение:

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";

Если у вас есть виды связанных функций, вы должны сделать их резервную копию до и восстановить их после.

1 голос
/ 01 июня 2017
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

Выход

Query Result Screenshot

0 голосов
/ 03 августа 2018

ОБНОВЛЕНИЕ сотрудника SET AttributeValue = AttributeName, AttributeName = AttributeValue не правильно, лучше создать один временный столбец и попробовать код ОБНОВЛЕНИЕ сотрудника SET temp = AttributeName тогда снова ОБНОВЛЕНИЕ сотрудника SET AttributeName = AttributeValuee еще раз

ОБНОВЛЕНИЕ сотрудника SET AttributeValuee = temp

0 голосов
/ 09 июля 2017

Просто поменяйте местами оба столбца в одном обновлении:

Update registration
Set AttributeName = AttributeValue ,
    AttributeValue = AttributeName where id in (1,2,3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...