高难度!如何在SQL server中实现不定期触发?

mybios 2002-09-21 11:25:49
其实我要实现的功能是这样的。
一个餐饮行业的管理软件。
前台使用PDA做,后台用PC做。都是基于ASP+SQL2000的。当然数据库是通用的。
PDA是用来点菜用的。而PC是用来统计数据的。当然还有预定的功能。就是某位先生要在某个时刻预订一张台,所以,我把这个预定的记录写进数据库之后就成了一条记录。然后这条记录就记录了一个何时让这张订了的台变成预订状态。
现在要做的就是如何根据这些记录让SQLserver自动触发,当到达这个时间的时候就改写另一个表。使这张台变成预订状态。。
如果用sql代理做的话是不行的。因为这个时间不是定死的。而是由客户自由输入的。可以是任何时间。
我现在使用的是没载入一次就执行一个存储过程。存储过程来把订台变成预定状态。但这样的效率比较低。。
...全文
25 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mybios 2002-09-24
  • 打赏
  • 举报
回复
还没有解决啊
mybios 2002-09-23
  • 打赏
  • 举报
回复
很谢谢你们热心回答。我都明白你们的意思。这样也是一种解决方法。dotAge(老朽) 你的解决方法不错。不过这样的话每次select都要运行一个function啊,是不是比我只运行一次存储过程还要花资源?不过你这样的做法实现了我的最初目的。就是可以把预定状态设置好!
dotAge 2002-09-22
  • 打赏
  • 举报
回复
确实是设计思路问题,你应该设计这样一张表,其实你也应该有这样一张表:
create table tbTableReserve (tableID int not null, reserveBegin smalldatetime null,reserveEnd smalldatetime,null)
当然你肯定还有一张tbTables(ID, ..... otherInfo of the table),ID为主键,tbTableReserve.tableID参照它。


然后可以有一个用户自定义函数,来确定桌子的预定状态:
create function fnReserveState (@tableID int,@time smalldatetime)
returns bit
AS
begin
if exists(select * from tbTableReserve where tableID=@tableID and @time between reserveBegin and reserveEnd) return 1
else return 0
end

可以用这样一个语句列出所有桌子的当前状态:
select ID,dbo.fnReserveState(id,getdate()) from tbTables

以上脚本为随手而写,不一定精确,示意而已。
qiubolecn 2002-09-22
  • 打赏
  • 举报
回复
你啥时写入这条记录或修改这条记录应该知道吧,就在这个时候,根据内容建一个job。

主动查询太费资源了
cleo 2002-09-22
  • 打赏
  • 举报
回复
我觉得你在设计数据库的时候把关系弄反了了,应该设计成主动查询状态比较好,而不是等待别人来更新状态。如果你经常要用到这个状态,可以做一个view,这样比较好。



34,576

社区成员

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

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