永发信息网

sql 触发器 子查询返回的不止一个值

答案:2  悬赏:70  手机版
解决时间 2021-03-14 03:18
ALTER TRIGGER 班级表人数添加
ON dbo.学生信息表
FOR insert
AS
begin
declare
@人数 int,
@班级编号 int
set @班级编号=(SELECt 班级编号 FROM inserted)
set @人数=(SELECt COUNT(学生信息表.学号) FROM 学生信息表 INNER JOIN 班级表 ON 学生信息表.班级编号 = 班级表.班级编号
WHERe (学生信息表.班级编号 =@班级编号))
update 班级表 set 人数=@人数 where 班级编号=@班级编号
end
---------------------
当我批量导入数据的时候出现子查询返回的不止一个值,单独插入一条数据不会有问题

下面的~不可以~还是不行,在数据库里面导入可以~通过我的程序导入就不可以了~
最佳答案
当然有问题,你设的参数只能取到一个值,所以如果你插入一行就没有问题,超过一行就不对。

ALTER TRIGGER 班级表人数添加
ON dbo.学生信息表
FOR insert
AS
begin
update a set a.人数=b.人数
from 班级表 a,(select 班级编号,count(*) 人数 from inserted group by 班级编号) b
where a.班级编号=b.班级编号
end
全部回答
你说的是 select ...... from inserted; 返回多行的情况么? --假设这个a是主表 create table a( aid int identity(1, 1) primary key, money int ); -- 假设这个b是 日志表, 负责记录 a表 发生的变化。 create table b( bid int identity(1, 1) primary key, aid int, money int ); go -- 假设这个c也是日志表, 负责记录 a表 发生的变化。 -- 但是这个c表是用于演示 不正确使用的例子。 create table c( cid int identity(1, 1) primary key, aid int, money int ); go -- 测试的存储过程 -- 当 a 表 插入 / 更新 / 删除的时候i, 都触发。 create trigger aftera on a for insert,update,delete as declare @aid int, @money int; begin if exists(select 1 from inserted) and not exists(select 1 from deleted) begin -- 插入触发. -- 正确的使用. insert into b select inserted.aid, inserted.money from inserted; -- 不正确的使用. select @aid = aid, @money = money from inserted; insert into c values ( @aid, @money); end; if exists(select 1 from inserted) and exists(select 1 from deleted) begin -- 更新触发. -- 正确的使用. insert into b select inserted.aid, inserted.money - deleted.money from inserted, deleted where inserted.aid = deleted.aid; -- 不正确的使用. select @aid = aid, @money = money from inserted; select @money = @money - money from deleted; insert into c values ( @aid, @money); end; if not exists(select 1 from inserted) and exists(select 1 from deleted) begin -- 删除触发 -- 正确的使用. insert into b select deleted.aid, 0 - deleted.money from deleted; -- 不正确的使用. select @aid = aid, @money = 0 - money from deleted; insert into c values ( @aid, @money); end; end; go -- 一条sql语句,插入一条数据 insert into a values (100); -- 一条sql语句,插入多条数据 insert into a select 10 union all select 20; go -- 一条sql语句,更新一条数据 update a set money = money - 50 where aid = 1; -- 一条sql语句,更新多条数据 update a set money = money + 50 where aid != 1; go -- 一条sql语句,删除一条数据 delete from a where aid = 1; -- 一条sql语句,删除多条数据 delete from a where aid != 1; go select * from b go bid aid money ----------- ----------- ----------- 1 1 100 2 3 20 3 2 10 4 1 -50 5 3 50 6 2 50 7 1 -50 8 3 -70 9 2 -60 (9 行受影响) select * from c go cid aid money ----------- ----------- ----------- 1 1 100 2 2 10 3 1 -50 4 2 30 5 1 -50 6 2 -60 (6 行受影响) 这里, aid = 3 的数据,没有被触发器处理。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
plus.screen.resolutionheight什么意思
三亚和巴厘岛到底哪个更适合旅游和拍摄婚纱照
石窝地址在哪,我要去那里办事
梦幻西游大唐号升144飞升降到129然后升到多少
仙人球对癌症有一定的功效。(修改病句)
今天玩王者荣耀fps怎么突然降低了
海南海达机动车驾驶员培训有限公司人民大道报
为什么一个男的说对一个女的有好感,没到喜欢
请问四月去日本什么地方可以看樱花?
北京服装学院附中
努比亚z9max黑色配什么手机壳
宝宝的奶粉买罐装的好还是铁装的好
开学典礼策划方案
东港农村商业银行北京路支行怎么去啊,有知道
洛阳2路公交都经过哪些站!
推荐资讯
鲁迅先生写了少年闰土这篇课文给你留下了深刻
PDF Password Cracker 2.2 怎么用啊。我载入P
如何人工孵化小鸟蛋我想要自孵化一个鸟蛋.孵
白沙跑马娱乐园售票点我想知道这个在什么地方
爱车之家汽车美容装饰用品店在什么地方啊,我
做过配菜两年多凉菜一年多。找一份配菜工作,
郭记牛杂店地址在哪,我要去那里办事
轿车轮胎两个侧面凹进,目测最深处有2毫米。
南昌市人民币收藏市场在哪?
大我三岁的干姐姐喜欢我,但我只想和她保持姐
每次吵架,老婆总跑出去,让我担心,怎么办?
小刚今年a岁,比爸爸小25岁,爸爸今年多少岁;
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?