SQLServer 创建触发器 当用户下单以后计算出总额再自动将订单总额累加到用户的个人消费金额里。

ayano_雪兔 2019-01-04 07:38:38
小白初学数据库,请求详细解答。
要求创建触发器,涉及两个表,分别是用户表和订单表,当用户下单以后,计算出总额并存储在订单表的总额一列中,再自动将订单总额累加到用户表的用户个人消费金额里。
...全文
802 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2019-01-05
  • 打赏
  • 举报
回复
引用 4 楼 ayano_雪兔 的回复:
[quote=引用 3 楼 二月十六 的回复:]total_cost总额 这个计算不用使用触发器,可以在插入的时候就直接计算插入了,或者是这列改成计算列

插入一个用户测试数据
INSERT INTO dbo.customers
(
user_id,
name,
sex,
phone,
address,
consumption,
email
)
VALUES
( 1, -- user_id - int
'张三', -- name - varchar(20)
'男', -- sex - char(2)
'13333333333', -- phone - varchar(16)
'地址', -- address - varchar(100)
0.0, -- consumption - float
'1@163.com' -- email - varchar(50)
)


建立触发器:
CREATE TRIGGER dbo.booking_TRI
on [dbo].[booking]
AFTER INSERT
as
UPDATE dbo.customers
SET consumption = ISNULL(consumption, 0) + t.total_cost
FROM
(
SELECT Inserted.user_id,
SUM(total_cost) total_cost
FROM Inserted
GROUP BY Inserted.user_id
) t
WHERE t.user_id = dbo.customers.user_id;
GO


插入两条数据:
INSERT INTO dbo.booking
(
order_id,
order_time,
user_id,
dish_id,
total_cost,
number,
state
)
VALUES
( 1,
GETDATE(),
1,
1,
1*(SELECT 10), -- 这里的10是根据menu表查出来的,楼主没给,我就写死了,这里直接price*number,不用触发器
1,
1
),( 2,
GETDATE(),
1,
1,
2*(SELECT 8), -- 这里的10是根据menu表查出来的,楼主没给,我就写死了,这里直接price*number,不用触发器
1,
1
)


测试结果:
SELECT * FROM booking
SELECT * FROM customers


谢谢帮助!!非常准确的回答!![/quote]如果帮到了你,记得结帖哦
ayano_雪兔 2019-01-05
  • 打赏
  • 举报
回复
引用 3 楼 二月十六 的回复:
total_cost总额 这个计算不用使用触发器,可以在插入的时候就直接计算插入了,或者是这列改成计算列

插入一个用户测试数据
INSERT INTO dbo.customers
(
user_id,
name,
sex,
phone,
address,
consumption,
email
)
VALUES
( 1, -- user_id - int
'张三', -- name - varchar(20)
'男', -- sex - char(2)
'13333333333', -- phone - varchar(16)
'地址', -- address - varchar(100)
0.0, -- consumption - float
'1@163.com' -- email - varchar(50)
)


建立触发器:
CREATE TRIGGER dbo.booking_TRI
on [dbo].[booking]
AFTER INSERT
as
UPDATE dbo.customers
SET consumption = ISNULL(consumption, 0) + t.total_cost
FROM
(
SELECT Inserted.user_id,
SUM(total_cost) total_cost
FROM Inserted
GROUP BY Inserted.user_id
) t
WHERE t.user_id = dbo.customers.user_id;
GO


插入两条数据:
INSERT INTO dbo.booking
(
order_id,
order_time,
user_id,
dish_id,
total_cost,
number,
state
)
VALUES
( 1,
GETDATE(),
1,
1,
1*(SELECT 10), -- 这里的10是根据menu表查出来的,楼主没给,我就写死了,这里直接price*number,不用触发器
1,
1
),( 2,
GETDATE(),
1,
1,
2*(SELECT 8), -- 这里的10是根据menu表查出来的,楼主没给,我就写死了,这里直接price*number,不用触发器
1,
1
)


测试结果:
SELECT * FROM booking
SELECT * FROM customers


谢谢帮助!!非常准确的回答!!
二月十六 版主 2019-01-05
  • 打赏
  • 举报
回复
total_cost总额 这个计算不用使用触发器,可以在插入的时候就直接计算插入了,或者是这列改成计算列

插入一个用户测试数据
INSERT INTO dbo.customers
(
user_id,
name,
sex,
phone,
address,
consumption,
email
)
VALUES
( 1, -- user_id - int
'张三', -- name - varchar(20)
'男', -- sex - char(2)
'13333333333', -- phone - varchar(16)
'地址', -- address - varchar(100)
0.0, -- consumption - float
'1@163.com' -- email - varchar(50)
)


建立触发器:
CREATE TRIGGER dbo.booking_TRI
on [dbo].[booking]
AFTER INSERT
as
UPDATE dbo.customers
SET consumption = ISNULL(consumption, 0) + t.total_cost
FROM
(
SELECT Inserted.user_id,
SUM(total_cost) total_cost
FROM Inserted
GROUP BY Inserted.user_id
) t
WHERE t.user_id = dbo.customers.user_id;
GO


插入两条数据:
INSERT INTO dbo.booking
(
order_id,
order_time,
user_id,
dish_id,
total_cost,
number,
state
)
VALUES
( 1,
GETDATE(),
1,
1,
1*(SELECT 10), -- 这里的10是根据menu表查出来的,楼主没给,我就写死了,这里直接price*number,不用触发器
1,
1
),( 2,
GETDATE(),
1,
1,
2*(SELECT 8), -- 这里的10是根据menu表查出来的,楼主没给,我就写死了,这里直接price*number,不用触发器
1,
1
)


测试结果:
SELECT * FROM booking
SELECT * FROM customers


ayano_雪兔 2019-01-04
  • 打赏
  • 举报
回复
Create table customers( --用户表
user_id int not null primary key, --用户iduser_name varchar(50) not null, --用户昵称
name varchar(20) not null, --用户真实姓名
sex char(2) not null check(sex = '男' or sex = '女'), --性别
phone varchar(16) not null, --手机号码
address varchar(100) not null, --地址
consumption float not null default 0, --个人消费金额
email varchar(50) null --邮箱

create table booking( --订餐表
order_id int not null primary key,--订餐编号
order_time datetime not null, --下单时间
user_id int not null, --用户编号
dish_id int not null, --菜肴编号
total_cost float not null, --订单总额
number int default 0, --下单数量
state int not null DEFAULT 0) --订单状态

创建一个触发器,当用户下单以后(在订餐表插入数据之后,要求触发器实现以下功能:计算出总额并存储在订单表的总额一列中,再自动将订单总额累加到用户表的用户个人消费金额里。

booking表的total_cost总额=booking表的number下单数量*menu表的price菜品单价

大致是这样了,不好意思啊,因为这个我刚刚才学,我列出了涉及的两个表的语句,请看看提供的信息有没有帮助。
吉普赛的歌 版主 2019-01-04
  • 打赏
  • 举报
回复
贴出详细的表结构脚本及测试数据吧。 随便说说, 人家不好帮你的

34,590

社区成员

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

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