大家帮我做一个触发器,让我学习一下,我恳给分,谢谢了

handyworkroom 2003-09-13 09:26:52
我在设计酒吧管理的数据库(部分)出现点问题想问问大家。
CREATE TABLE [dbo].[room] ( --房台表,记录所有的房台,名称,类型,大小等信息
[room_id] [char] (3) NOT NULL ,
[name] [nvarchar] (10) NULL ,
[type] [nvarchar] (10) NULL ,
[content] [int] NULL ,
[status] [int] null ---状态字段*****
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[roomstatus] ( --房台状态表,
[state_id] [int] (3) NOT NULL ,
[name] [nvarchar] (10) NULL
) ON [PRIMARY]
GO
0,空闲
1,预订
2,预订+预订
4,使用
5,使用+预订
8,使用+使用
6,禁用
7,禁用+预订
10,禁用+使用
CREATE TABLE [dbo].[guest] (--客人表,即使用的表,在结帐前,closetime是为null
[guest_id] [char] (8) NOT NULL ,
[name] [nvarchar] (50) NOT NULL ,
[number] [int] NULL ,--人数
[room_id] [char] (3) NULL ,
[bill_id] [char] (2) NULL ,--单类型,与问题无关
[open_time] [smalldatetime] NULL ,
[close_time] [smalldatetime] NULL ,
[serverop] [varchar] (5) NULL ,--服务生
[op_id] [varchar] (5) NULL ,--操作员
[note] [nvarchar] (36) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[orderdishes] (--客人点菜表,
[statement_id] [char] (10) NOT NULL ,
[guest_id] [char] (8) NOT NULL ,
[type_id] [char] (3) NOT NULL ,
[food_id] [char] (5) NOT NULL ,
[name] [nvarchar] (20) NOT NULL ,
[amount] [int] NOT NULL ,
[price] [money] NOT NULL ,
[discount] [decimal](3, 2) NOT NULL ,
[specialneed] [nvarchar] (30) NULL
) ON [PRIMARY]
GO
Reserve表--预订表
reserve_id,room_id,deposit,opentime, iscancel,note
押金 预开台时间 是否取消
nouse表--禁用表
nouse_id,room_id,starttime,endtime,note
我现在想做若干个触发器去实现:
1、如果当向预订表添加记录,触发它修改room表中status字段为对应值(roomstatus)
***注意的是,当预订表有此房台的预订超过两条时,就不改它的值了(也就是2)
2、当修改预订表时,也就是iscancel为真的(取消),再触发它修改room表中status字段为对应值(roomstatus)

大家帮我一把,我对触发器只明白定义,还真没做过,大家帮我做一个,让我学学,如果可以,也可以做做禁用表的触发器,谢谢大家了
...全文
32 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
handyworkroom 2003-09-14
  • 打赏
  • 举报
回复
TO: nboys()
谢谢你的帮助,不过,我的注意部分你可能没看清楚吧,我要补充的是当这个roomid中现在已经是使用时,再做预订的这种情况也要考虑进去的呀(那样的话,状态值就应该是5)!再帮我看看吧,谢谢.
-----------------------
如果当向预订表添加记录,触发它修改room表中status字段为对应值(roomstatus)
***注意的是,当预订表有此房台的预订超过两条时,就不改它的值了(也就是2)
st_2000 2003-09-14
  • 打赏
  • 举报
回复
搞好两个缓冲表就行了吧。
deleted,inserted.
handyworkroom 2003-09-14
  • 打赏
  • 举报
回复
对不起,我就是不会做,所以才想请教大家的呀,给我留点代码呀,谢谢
nboys 2003-09-14
  • 打赏
  • 举报
回复
1.
create trigger t_name1 on Reserve
for insert
as
begin
if not exists(select * from Reserve where room_id = (select room_id from inserted))
update room set status=1 where room_id = (select room_id from inserted)
end
go



2.
create trigger t_name2 on Reserve
for update
as
begin
if update(iscancel)
update room set status=0 where room_id = (select room_id from deleted where iscancel=1)
end
go

nboys 2003-09-14
  • 打赏
  • 举报
回复
1.
create trigger t_name1 on Reserve
for insert
as
begin
if not exists(select * from Reserve where room_id = (select room_id from inserted))
update room set status=1 where room_id = (select room_id from inserted)
end
go



2.
create trigger t_name2 on Reserve
for update
as
begin
update room set status=0 where room_id = (select room_id from deleted where iscancel=1)
end
go
nboys 2003-09-14
  • 打赏
  • 举报
回复
1.

create trigger t_name1 on Reserve
for insert
as
begin
if not exists(select * from Reserve where room_id = (select room_id from inserted))
update room set status=1 where room_id = (select room_id from inserted)
go
yujohny 2003-09-14
  • 打赏
  • 举报
回复
楼主,昨晚突然停电,不好意思!!!
nboys 2003-09-14
  • 打赏
  • 举报
回复
1.
create trigger t_name1 on Reserve
for insert
as
begin
if not exists(select * from Reserve where room_id = (select room_id from inserted))
update room set status=1 where room_id = (select room_id from inserted)
else
update room set status=5 where room_id = (select room_id from inserted)
end
go
antoversky 2003-09-13
  • 打赏
  • 举报
回复
我的意思没有必要建触发器,若一定想建的话
在触发器中有在INSERT,DELETE,UPDATE三种情况下的触发器应该可以解决你的疑惑

34,576

社区成员

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

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