日期:2014-05-18  浏览次数:20475 次

子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,?
tab_pers_info
pers_id       主键  
pers_no
pers_name

图书借阅登记
id                 主键
学号
姓名
现在我要级联修改,写了这样一个触发器
alter   trigger   alter_student_basic

on   dbo.tab_pers_info
for   update
as   if   update(pers_no)   or   update(pers_name)
set   nocount   on  
declare   @student_number   varchar(20)
set   @student_number=(select   pers_no   from   deleted)
declare   @学号   varchar(20)
set   @学号=(select   pers_no   from   inserted)
declare   @姓名   varchar(20)
set   @姓名=(select   pers_name     from   inserted)
update   图书借阅登记   set   借阅人学号=@学号,借阅人姓名=@姓名   where   借阅人学号=@student_number

如果在图书借阅登记表里有重复学号,修改tab_pers_info时就会出现返回的值多于一个。当子查询跟随在   =、!=、 <、 <=、> 、> =   之后,或子查询用作表达式时
没有重复学号时可以修改
这个怎么解决?

------解决方案--------------------
alter trigger alter_student_basic
on dbo.tab_pers_info
for update
as if update(pers_no) or update(pers_name)
update A set 借阅人学号=B.pers_no,借阅人姓名=B.pers_name
From 图书借阅登记 Inner Join Inserted B On A.借阅人学号=B.pers_no
GO