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

jay*_*jay 59 sql sql-server sql-server-2008

我有一个名为Employee的表

 Eno     ename     AttributeValue      AttributeName  
 1       aa           a123             abc
 2       bbb          b123             dcf
 3       cc           c7sd             wew3
Run Code Online (Sandbox Code Playgroud)

我希望将数据从交换柱AttributeValueAttributeNameAttributeNameAttributeValue

例如:

Eno     ename     AttributeValue   AttributeName  
1       aa        abc              a123
2       bbb       dcf              b123
3       cc        wew3             c7sd
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 94

UPDATE employee
SET AttributeValue = AttributeName, 
    AttributeName = AttributeValue
Run Code Online (Sandbox Code Playgroud)

但是,除非两列具有完全相同的定义,否则您可能会丢失信息.

  • @druciferre这是声明性编程.说出你想要的,而不是如何完成它. (11认同)
  • 简直不敢相信.来自C++思维模式,我的大脑一直在说"不......那是行不通的.两个值都将最终成为`AttributeName`的初始值." (5认同)

Joh*_*ock 14

Update employee
Set attributeValue = attributeName,
    attributeName = attributeValue
Run Code Online (Sandbox Code Playgroud)


Gen*_*ari 6

update Employee set AttributeValue = AttributeName, AttributeName = AttributeValue


bor*_*mat 6

所有以前的技术对于大表来说都很慢,它们移动数据而不是重命名列,这是一个简单的解决方案:

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";
Run Code Online (Sandbox Code Playgroud)

如果您有链接的功能视图,您必须先备份它们,然后再恢复它们。