【发布时间】:2021-06-22 00:05:41
【问题描述】:
我必须在 Claims 表上创建一个触发器,只要将新记录插入到 Claims 表中就会触发该触发器。此触发器应存储客户名称和该客户的 amount_of_claim 总数。
Claim_audits(审计表)已经创建。
架构:
Claims
id int(11)
status_id int(11)
customer_policy_id int(11)
date_of_claim date
amount_of_claim float
> one or many to one(and only one) towards Customer_policy
Customer_policy
id int(11)
policy_start_date date
policy_renewal_date date
policy_id int(11)
customer_id int(11)
agent_id(11)
> one or many to one (and only one) towards Customer
Customer
id int(11)
first_name varchar(30)
last_name varchar(30)
email varchar(30)
address_id int(11)
输出应如下所示:
customer_name amount_of_claim
abhinav 195000
这是我尝试过的:
CREATE TRIGGER claim_audits on claims
for insert
as
declare @custname varchar(25);
declare @amount varchar(25);
declare @action varchar(25);
select @custname = first_name from customer c
join inserted i on i.id=c.id;
select @amount = i.amount_of_claim from inserted i;
select @action = 'Updated customer claimed amount';
insert into claim_audits values(@custname , @amount , @action);
select * from claim_audits;
go
【问题讨论】:
-
您需要做的第一件事是阅读 Inserted and Deleted pseudo-tables,因为它们可以有 0-N 行...而不仅仅是 1。您注意到哪些触发器无法正常工作?为什么最后选择
* from claim_audits?在触发器中选择是非常糟糕的做法......您要完成什么。 -
@DaleK 但是这不会只在插入查询后触发,所以它总是至少有一条记录??
-
如果它有 2 条记录怎么办?如果它有 0 条记录怎么办?
-
amount_of_claim floatfloat 是近似值。请改用decimal或numeric。 -
@ShubhamPanwar 如果客户有多项索赔,也将总索赔金额放在我看来毫无意义。但我想这真的归结为,你用这个审计表做什么?
标签: sql sql-server tsql triggers