簡體   English   中英

如何在 sql server 2008 中交換列值?

[英]How do I swap column values in sql server 2008?

我有一張名為 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
UPDATE employee
SET AttributeValue = AttributeName, 
    AttributeName = AttributeValue

但是,除非兩列具有完全相同的定義,否則您可能會丟失信息。

Update employee
Set attributeValue = attributeName,
    attributeName = attributeValue

update Employee set AttributeValue = AttributeName, AttributeName = AttributeValue

所有以前的技術對於大表來說都很慢,它們移動數據而不是重命名列,這是一個簡單的解決方案:

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

如果您有鏈接的功能視圖,您必須先備份它們,然后再恢復它們。

這真是個好例子

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;

結果

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

輸出

查詢結果截圖

只需在一次更新中交換兩列:

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

更新員工 SET AttributeValue = AttributeName, AttributeName = AttributeValue 創建一個臨時列並嘗試代碼更新員工 SET temp= AttributeName 然后再次更新員工 SET AttributeName = AttributeValuee 是不正確的

更新員工 SET AttributeValuee= temp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM