表具有FIXED记录数

时间:2015-09-06 06:13:00

标签: sql sql-server sql-server-2008

我正在使用SQL Server 2008,并想知道是否有办法在表中只包含一定数量的记录。旧记录将自动替换为新记录。

例如,table1应始终包含100条记录。较新的记录将替换为较旧的记录。任意点的表中记录数的计数不应超过100。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您不希望输出成为最新的100条记录(使用SELECT TOP 100 [...] ORDER BY YourDateColumn很容易实现。

如果您真的想要确保存储100条最新记录并删除其余记录,则应使用触发器。

一些问题:是否会有多个操作此表的用户(会话)? “最新”是否会仅由INSERT更改,或者UPDATE的旧记录是否会更新?

但我会想到这个!如果你没有充分的理由这样做,我绝对不会这样......

你永远不应该试图删除另一个会话仍然可以依赖的记录。

我会做什么:

使用“TOP 100”-View来实现您的目标和正常运行的工作,以丢弃带有一些宿醉周期的旧记录。

答案 1 :(得分:1)

在这种情况下,您可以使用触发器
在[计划]上创建触发器而不是触发器 INS INS INS AS
开始时

声明@count int v 从[计划]中选择@count = COUNT(*)

如果(@计数N = 0)

开始
  禁用触发器ReplaceTrigger

插入[计划]
       颜色=颜色
       FROM插入

启用触发器ReplaceTrigger
  结束   否则
   开始    声明@LastId int
   从[计划]中选择@ LastId = COUNT(LastId)
/ * LastID将是一个额外的列,用于维护last的历史记录,以便您可以更新下一列* /
    更新[计划]设置颜色=颜色,LastId = @ LastId + 1其中Id = Id
   结束
  
END