web-dev-qa-db-fra.com

Comment permuter les valeurs de colonne dans SQL Server 2008?

J'ai une table appelée Employé

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

Je veux permuter les données de la colonne AttributeValue à AttributeName et AttributeName à AttributeValue

Par exemple:

Eno     ename     AttributeValue   AttributeName  
1       aa        abc              a123
2       bbb       dcf              b123
3       cc        wew3             c7sd
51
jay
UPDATE employee
SET AttributeValue = AttributeName, 
    AttributeName = AttributeValue

Toutefois, sauf si les deux colonnes ont exactement la même définition, vous risquez de perdre des informations.

81
Oded
Update employee
Set attributeValue = attributeName,
    attributeName = attributeValue
11
John Hartsock

update Employee set AttributeValue = AttributeName, AttributeName = AttributeValue

4
GendoIkari

C'est vraiment un bon exemple

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
Mind Peace
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

Sortie

Query Result Screenshot

1
Arpit Trivedi

Toutes les techniques précédentes sont lentes car les grandes tables déplacent la date au lieu de renommer les colonnes, voici une solution simple:

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

Si vous avez des vues de fonctions liées, vous devez les sauvegarder et les restaurer ensuite.

1
bormat

Il suffit d'échanger les deux colonnes en une seule mise à jour:

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

UPDATE employee SET AttributeValue = AttributeName, AttributeName = AttributeValue: il n'est pas correct de créer une colonne temporaire et d'essayer le code UPDATE employee SET temp = NomName Puis à nouveau UPDATE employee SET AttributeName = AttributeValuee À nouveau.

UPDATE employee SET AttributeValuee = temp

0
Taniya Chowdhury