SQL server 2005 触发器的一个问题,高手帮忙看看

bean115 2010-04-30 01:26:56
有三张表
student(stuId,stuName)
course(courseId,courseName)
select_course(stuId,courseId)

写一个触发器实现
--9.更改一个学生的学号时,自动修改相应的选课记录的学号。
Create TRIGGER UpdateId_Trigger
ON student
INSTEAD OF UPDATE
as
BEGIN
--SET NOCOUNT ON
if update(stuId)
begin
declare
@newstuid nchar(20),
@oldsid nchar(20)

set @newstuid=(select stuId from inserted)
set @oldsid=(select stuId from deleted)
update select_course set stuId=@newstuid where stuId=@oldsid

end
else
begin
print '没有更改学生的学号'
end
END
Go
-----------------------------------------------------------------------
以上编译成功
--------------------------------------------------------------------------
想验证一下下,然后执行如下代码
update student set stuId= 's6' WHERE stuName='Sally'
Go
select * from select_course



但是出现了错误:
消息 547,级别 16,状态 0,过程 UpdateId_Trigger,第 15 行
UPDATE 语句与 FOREIGN KEY 约束"FK__select_co__stuId__4CF5691D"冲突。该冲突发生于数据库"master",表"dbo.student", column 'stuId'。
语句已终止。
--------------------------------------------------------------------
怎么解决呢? 有外码约束不能先修改student,那触发器怎么能实现这个功能呢??

...全文
136 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
oushihua 2012-04-13
  • 打赏
  • 举报
回复
把@@count写成str(@@count),后面的也是这样
bean115 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 htl258 的回复:]
SQL code
不需要触发器,外键级联更新就能做到.

--1.删除原外键约束:
alter table select_course drop constraint FK__select_co__stuId__4CF5691D
go

--2.重新建立带级联更新删除的外键约束:
alter table select_course add foreign key (stuid) r……
[/Quote]

谢谢,明白怎么解决了。
能再请教一个问题吗?
print '第'+ @@count +'位学生的学号是:'+ @sid

错误:
消息 245,级别 16,状态 1,过程 pro_show,第 17 行
在将 varchar 值 '第' 转换成数据类型 int 时失败。
bean115 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zuiyuezhou888 的回复:]
有个选项 级联 cascade
先把原来的约束给drop掉
然后添加带级联更新删除的外键约束
[/Quote]


我没有找到 那个 级联的 选项 啊?在哪里呢?
seairhh 2010-04-30
  • 打赏
  • 举报
回复
UP ...............
luxi0194 2010-04-30
  • 打赏
  • 举报
回复
up。。。
sych888 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 htl258 的回复:]
SQL code
不需要触发器,外键级联更新就能做到.

--1.删除原外键约束:
alter table select_course drop constraint FK__select_co__stuId__4CF5691D
go

--2.重新建立带级联更新删除的外键约束:
alter table select_course add foreign key (stuid) r……
[/Quote]
学习..........
jason99032 2010-04-30
  • 打赏
  • 举报
回复
XUEXI
sych888 2010-04-30
  • 打赏
  • 举报
回复
select @newstuid=stuId from inserted
select @oldsid= stuId from deleted
zuiyuezhou888 2010-04-30
  • 打赏
  • 举报
回复
有个选项 级联 cascade
先把原来的约束给drop掉
然后添加带级联更新删除的外键约束
rmljoe 2010-04-30
  • 打赏
  • 举报
回复
学习了
htl258_Tony 2010-04-30
  • 打赏
  • 举报
回复
不需要触发器,外键级联更新就能做到.

--1.删除原外键约束:
alter table select_course drop constraint FK__select_co__stuId__4CF5691D
go

--2.重新建立带级联更新删除的外键约束:
alter table select_course add foreign key (stuid) references student(stuid) on update cascade on delete cascade;
go


yesyesyes 2010-04-30
  • 打赏
  • 举报
回复
级联更新不就行了嘛
dichun 2010-04-30
  • 打赏
  • 举报
回复
可以把表外键关系去掉;

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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