2013-11-29 40 views
1

我不想记录表中超过15个表行不能超过15

场景:新记录保存 。如果它是一个16的记录数。第一个记录被删除。 如何删除第一条记录?是否可以自动完成?

+0

是的,你可以使用触发器。还要考虑插入时间戳,并将表格隐藏在仅选择最新15条记录的视图后面。 –

回答

0

如果是实体框架,你想在这里使用一个基本原则是

假设你的对象是人,它集称为人

  1. 在你做context.people.add(新的人())适用如下逻辑
  2. 获得的人数量在数据库context.people.count()
  3. 检查,如果该计数大于15,您可以通过单一statment if(context.people.count()>15)
  4. 做到这一点
  5. 里面,如果你能写people firstperson = context.people.OrderBy(x=>x.ID).First() or if you have date inserted or added you can use .OrderBy(X => x.dateadded)and pick the first element. Make sure you order it in correct way using排序依据or OrderByDescending`
  6. 发生此记录在一个变量,并调用context.remove(firstperson)你做context.add(new person())

之前,如果你这样做在空表中,您的ID会增加,但您可以通过ID顺序安全地删除,并且每次删除时都至少选择一个。

0
WITH A AS ( SELECT TOP 1 * FROM 的MyTable )

DELETE FROM甲

与INSERT,UPDATE使用的TOP表达引用的行,或删除不设置在任何顺序。

因此,您最好使用WITH ORDER BY子句的决定,它可以让您更确切地指定您认为哪一行是第一行。

0

这使用触发器和标识列来确保只有15个最近插入的行保留在表中。

CREATE TABLE MyTable 
(
    rowID INT IDENTITY(1,1) PRIMARY KEY 
    ,MyColumn VARCHAR(255) NOT NULL 
) 
GO 

CREATE TRIGGER TG_MyTable_Only15 
ON MyTable 
AFTER INSERT 
AS 
BEGIN 
    WITH 
      t1 
       (
        rowID 
       ) 
      AS 
       (
        SELECT TOP 15 
        rowID 
        FROM MyTable 
        ORDER BY rowID DESC 
       ) 
    DELETE FROM MyTable 
    WHERE rowID NOT IN (SELECT rowID FROM t1) 
END 
GO