【发布时间】:2021-05-18 15:09:25
【问题描述】:
我需要创建一个触发器,以在每次新增伤害后更新Total 列。
Total 必须随着这种损坏的成本而增加,所以我有这个错误:
消息 512,级别 16,状态 1,过程 TotalDmg,第 4 行
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
我的脚本:
create database carsLoan
use carsLoan
create table Loan
(
idL int primary key,
Total float
)
insert into Loan
values (1, 300), (2, 200), (3, 400)
create table Damage
(
idD int primary key,
idL int references Loan,
description varchar(100),
Cost float
)
insert into Damage
values (1, 1, 'Damage1', 70), (2, 2, 'Damage2', 90), (3, 3, 'Damage3', 80)
alter trigger TotalDmg
on Damage
after insert
as
begin
declare @cost float
set @cost = (select Cost from Damage
where idD = (select idD from inserted))
declare @total float
set @total = (select Total from Loan
where idL = (select idL from inserted))
update Loan
set Total = @total + @cost
where idL = (select idL from inserted)
end
【问题讨论】:
-
你的触发器有缺陷;它假设
INSERT仅影响 1 行;这根本不是真的。 -
另外,
float是我认为是货币价值的数据类型的糟糕选择。 -
您是否记住了每个错误编号?其他人也不会。发布完整的错误消息。
-
@SMor 消息 512,级别 16,状态 1,过程 TotalDmg,第 4 行子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。声明已终止。
标签: sql sql-server database tsql triggers