简单触发器问题。求大神

lmpeng1990 2012-06-08 02:41:22
创建一触发器,当修改课程编号时,成绩表中的课程编号也要做相应修改。
score course 主键cno
...全文
109 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

引用 8 楼 的回复:
SQL code


CREATE table score
(cno varchar(10))

CREATE table course
(cno varchar(10))

INSERT INTO score SELECT '001'
INSERT INTO course SELECT '001'

CREATE TRIGGER tr_Upd……
[/Quote]

膜拜
lmpeng1990 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
SQL code


CREATE table score
(cno varchar(10))

CREATE table course
(cno varchar(10))

INSERT INTO score SELECT '001'
INSERT INTO course SELECT '001'

CREATE TRIGGER tr_Update ON course F……
[/Quote]
8L真相帝,大神太犀利了,膜拜
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

SQL code

CREATE table score
(cno varchar(10))

CREATE table course
(cno varchar(10))

INSERT INTO score SELECT '001'
INSERT INTO course SELECT '001'

CREATE TRIGGER tr_Update ON course FOR UPDATE
……
[/Quote]

额,批量处理就挂了
lmpeng1990 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:

god of lee 加下我qq嘛984106412,按照那个写了一个还是不行。。。


这个问题直接用主外键的级联删除更新就解决了,干嘛非得写触发器?纳闷
[/Quote]
没办法,老师蛋疼,我们就得去做……
koumingjie 2012-06-08
  • 打赏
  • 举报
回复

CREATE table score
(cno varchar(10))

CREATE table course
(cno varchar(10))

INSERT INTO score SELECT '001'
INSERT INTO course SELECT '001'

CREATE TRIGGER tr_Update ON course FOR UPDATE
AS
BEGIN
declare @DeleteCno int
declare @InsertCno int
select @DeleteCno=cno from deleted
select @InsertCno=cno from inserted
update score set cno=@InsertCno where cno=@DeleteCno
END

UPDATE course SET cno ='002' WHERE cno='001'
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

god of lee 加下我qq嘛984106412,按照那个写了一个还是不行。。。
[/Quote]

这个问题直接用主外键的级联删除更新就解决了,干嘛非得写触发器?纳闷
lmpeng1990 2012-06-08
  • 打赏
  • 举报
回复
god of lee 加下我qq嘛984106412,按照那个写了一个还是不行。。。
  • 打赏
  • 举报
回复

if object_id('tri_test')is not null
drop trigger tri_test
go
create trigger tri_test on tb
for update
as
update 成绩表
set cno=i.cno from inserted where i.标识列=成绩表.标识列

lmpeng1990 2012-06-08
  • 打赏
  • 举报
回复
ALTER trigger [dbo].[updatecourse]
on [dbo].[course]
instead of update
as
begin
declare @a float
set @a=(select cno from deleted)
update course set @a=cno where cno=@a
update Score set @a=cno where cno=@a
end
我这样写的,结果不行……
lmpeng1990 2012-06-08
  • 打赏
  • 举报
回复
数据库的课程设计……
就叫用触发器去做的。不能用外键 ,只要修改就行了。大神些写下哈
  • 打赏
  • 举报
回复
这两个表的课程编号是主外间关系吧?直接在外键上设置级联删除,更新就好了

alter table 表名
add constraint 外键名
foreign key(字段名) references 主表名(字段名)
on delete cascade on update cascade

这样就好了
不要触发器的
AcHerat 2012-06-08
  • 打赏
  • 举报
回复
修改的时候要,删除的时候呢?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧