使用SQL分区删除数据

时间:2015-04-09 10:44:02

标签: sql sql-server partitioning

我想创建一个实现分区功能的表,这样如果记录数变为5 + 1则第一个记录被删除例如,如果记录是1,2,3,4,5,我们插入第6个记录然后第一条记录被删除,剩余记录为2,3,4,5,6

2 个答案:

答案 0 :(得分:0)

在您Insert之后,您可以添加以下内容:

delete from mytable
where RecordID <= select(MAX(RecordID)-5 from mytable);

这样就可以删除最近5行之前的所有内容。

答案 1 :(得分:0)

您可以在插入后使用触发器删除多余的行。试试这个例子:

BEGIN TRANSACTION;
SET NOCOUNT ON;

create table t (id int identity(1,1), val char(1))
go

create trigger limit_t on t for insert as
  begin
  if (select count(*) from t) > 5
  delete from t where id <= (select max(id)-5 from t);
  end
go

-- insert five rows
insert t (val) values ('a'),('b'),('c'),('d'),('e')
-- insert a sixth and seventh row
insert t (val) values ('f'),('g')
-- retrieve content after last insert
select * from t
-- the table now holds values [c,d,e,f,g]

ROLLBACK TRANSACTION;