首页 新闻 会员 周边

sql server 中怎样互换两行的主键值?

0
悬赏园豆:15 [已解决问题] 解决于 2009-12-11 12:53

刚学数据库

表course(cno,cname)cno为主键

cno          cname

001         计算机基础

002         数据结构

怎样互换以上两项的cno值?

谢谢

jiaodanran的主页 jiaodanran | 初学一级 | 园豆:180
提问于:2009-12-11 01:03
< >
分享
最佳答案
0
代码
use testdb
go
if object_id('mytable1') is not null
drop table mytable1

Create table mytable1
( cno nvarchar(
50) primary key ,cname Nvarchar(20))
go
truncate table mytable1
--Init Data
insert into mytable1
select
'001','计算机基础' union all
select
'002','数据结构'

--临时表存储001
Declare @tbVar table (cno nvarchar(
50),cname Nvarchar(20))
insert into @tbVar
select
* from mytable1 where cno='001'
--更新001
update mytable1
set cname=(select cname from mytable1 where cno='002')
where cno='001'
--从临时表更新002
update mytable1
set cname=(select cname from @tbVar where cno='001')
where cno='002'

select
* from mytable1

执行结果:

cno    cname
001    数据结构
002    计算机基础

再执行结果:

cno    cname
001    计算机基础
002    数据结构

收获园豆:5
邀月 | 高人七级 |园豆:25475 | 2009-12-11 08:21
其他回答(3)
0

借助第三行。

收获园豆:5
阿龍 | 园豆:268 (菜鸟二级) | 2009-12-11 09:35
0

SELECT CNO,CNAME=CASE WHEN CNO='001' THEN '数据结构'
    WHEN CNO='002' THEN '计算机基础'
ELSE '未定义'
END
FROM course

---适合数据情况少的状况...

收获园豆:5
☆用心生活☆ | 园豆:310 (菜鸟二级) | 2009-12-11 11:42
0

@用心生活 应该是比较接近漂亮的答案的,漂亮的答案在下面 :
-- 创建table course
CREATE TABLE course
(cno VARCHAR(200) NOT NULL,
cname VARCHAR(200) NOT NULL)
--插入主键值改变的值
INSERT INTO course (cno, cname) VALUES ('001', '计算机基础'), ('002', '数据结构')

--运用CASE WHEN 语句改变主键值
UPDATE course
SET cno = CASE WHEN cno = '001'
THEN '002'
WHEN cno = '002'
THEN '001'
ELSE cno END
WHERE cno IN ('001', '002');

埃尔多安 | 园豆:204 (菜鸟二级) | 2020-04-11 16:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册