我正在使用SQL Server 2008,并想知道是否有办法在表中只包含一定数量的记录。旧记录将自动替换为新记录。
例如,table1应始终包含100条记录。较新的记录将替换为较旧的记录。任意点的表中记录数的计数不应超过100。
答案 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