作者zong780405 (Tikky)
看板Database
标题[SQL] Insert 指令 疑问。
时间Mon Mar 15 23:51:35 2010
使用 SQL2008
原始资料
TABLE1:学生 PK:学号
┌───┬───┐
│ 学号 │ 姓名 │
└───┴───┘
TABLE2:修课 PK:学号、课程编号
┌────┬─────┬─────┬─────┬─────┐
│ 学号 │ 课程编号 │ 课程名称 │ 学分数 │ 成绩 │
└────┴─────┴─────┴─────┴─────┘
------------------------------------------------------------
正规化之後,拆成三表格。
表1:学生
┌───┬───┐
│ 学号 │ 姓名 │ PK:学号
└───┴───┘
表2:课程
┌────┬────┬────┐
│课程编号│课程名称│ 学分数 │ PK:课程编号
└────┴────┴────┘
表3:成绩
┌────┬────┬────┐
│ 学号 │课程编号│ 成绩 │ PK:学号 课程编号
└────┴────┴────┘
-------------------------------------------------------------
我想用一组 INSET 新增资料,如下图。
TABLE:修课
┌────┬─────┬─────┬─────┬─────┐
│ 学号 │ 课程编号 │ 课程名称 │ 学分数 │ 成绩 │
├────┼─────┼─────┼─────┼─────┤
│ 001 │ C001 │ 管理学 │ 3 │ 98 │
├────┼─────┼─────┼─────┼─────┤
│ 001 │ D003 │ 资料库 │ 3 │ 66 │
├────┼─────┼─────┼─────┼─────┤
│ 002 │ F010 │ SQL │ 2 │ 88 │
├────┼─────┼─────┼─────┼─────┤
│ 002 │ C001 │ 管理学 │ 3 │ 96 │
├────┼─────┼─────┼─────┼─────┤
│ 003 │ C001 │ 管理学 │ 3 │ 100 │
└────┴─────┴─────┴─────┴─────┘
请问该怎麽下指令~?
是用VIEW观点来做,应该没错吧?
--作法---------------------------------------------------------------------
1. 先建立一 View:修课
CREATE VIEW View_修课
AS
SELECT 成绩.学号, 课程.课程编号, 课程.课程名称, dbo.课程.学分数, dbo.成绩.成绩
FROM dbo.成绩 INNER JOIN dbo.课程
ON dbo.成绩.课程编号 = dbo.课程.课程编号
---------------------------------------------------------------------------
2.作一个trigger: dbo.triger_表单
CREATE trigger triger_表单
ON View_修课 //*将该triger 绑到 view 中
instead of insert
AS
if not exists(select inserted.课程编号
from inserted
where inserted.课程编号 = any (select 课程.课程编号 from 课程))
begin
insert into 课程 (课程编号, 课程名称, 学分数)
select inserted.课程编号, inserted.课程名称, inserted.学分数
from inserted
group by inserted.课程编号, inserted.课程名称, inserted.学分数
end
if not exists(select inserted.学号
from inserted
where inserted.课程编号 = any(select 成绩.课程编号 from dbo.成绩)
and inserted.学号 = any(select 成绩.学号 from dbo.成绩 ))
begin
insert into dbo.成绩 (学号, 课程编号, 成绩)
select inserted.学号,inserted.课程编号,inserted.成绩
from inserted
end
-----------------------------------------------------------
3.用insert指令
INSERT INTO View_修课 (学号,课程编号,课程名称,学分数,成绩)
VALUES (001 , 'C001' , '管理学' , 3 , 98 ),
(001 , 'D003' , '资料库' , 3 , 66 ),
(002 , 'F010' , 'SQL ' , 2 , 88 ),
(002 , 'C001' , '管理学' , 3 , 96 ),
(003 , 'C001' , '管理学' , 3 , 100)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.36.54.1
※ 编辑: zong780405 来自: 114.36.55.138 (03/16 18:55)
※ 编辑: zong780405 来自: 114.36.55.138 (03/16 20:26)
※ 编辑: zong780405 来自: 140.131.114.55 (03/17 10:09)
※ 编辑: zong780405 来自: 140.131.114.55 (03/17 10:10)
1F:→ grence:当练习还好;真要这麽做,直接把table规格开成view不就好了 03/18 00:22