刚学数据库
表course(cno,cname)cno为主键
cno cname
001 计算机基础
002 数据结构
怎样互换以上两项的cno值?
谢谢
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 数据结构
借助第三行。
SELECT CNO,CNAME=CASE WHEN CNO='001' THEN '数据结构'
WHEN CNO='002' THEN '计算机基础'
ELSE '未定义'
END
FROM course
---适合数据情况少的状况...
@用心生活 应该是比较接近漂亮的答案的,漂亮的答案在下面 :
-- 创建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');