webentwicklung-frage-antwort-db.com.de

Wie tausche ich Spaltenwerte in SQL Server 2008 aus?

Ich habe eine Tabelle namens Employee

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

Ich möchte die Daten von Spalte AttributeValue zu AttributeName und AttributeName zu AttributeValue austauschen.

Zum Beispiel:

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

Wenn jedoch nicht beide Spalten exakt dieselbe Definition haben, besteht die Gefahr, dass Sie Informationen verlieren.

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

update Employee set AttributeValue = AttributeName, AttributeName = AttributeValue

4
GendoIkari

Das ist ein wirklich gutes Beispiel

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

Ausgabe

Query Result Screenshot

1
Arpit Trivedi

Alle vorherigen Techniken sind für große Tabellen langsam, da sie Datum verschieben, anstatt Spalten umzubenennen. Dies ist eine einfache Lösung:

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

Wenn Sie Ansichten von Funktionen haben, müssen Sie sie vorher sichern und danach wiederherstellen.

1
bormat

Tauschen Sie einfach beide Spalten in einem einzigen Update aus:

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

UPDATE-Mitarbeiter SET AttributeValue = Attributname, AttributeName = AttributeValue Es ist nicht richtig, eine temporäre Spalte zu erstellen und den Code zu verwenden UPDATE-Mitarbeiter SET temp = Attributname Dann erneut UPDATE-Mitarbeiter SET AttributeName = AttributeValuee .__

UPDATE-Mitarbeiter SET AttributeValuee = Temp

0