表行永远不会超过15

时间:2013-11-29 01:23:32

标签: sql-server entity-framework

我不希望记录超过15个。

方案: 保存新记录。如果它是16的记录号。要删除的第一条记录。 如何删除第一条记录?可以自动完成吗?

3 个答案:

答案 0 :(得分:0)

如果它是实体框架,并且您想在此处使用基本规则,那么

假设您的对象是人,其集合称为人

  1. 在你做context.people.add(new person())之前应用以下逻辑
  2. 获取数据库context.people.count()
  3. 中的人数
  4. 检查此计数是否大于15,您可以通过单个身份if(context.people.count()>15)
  5. 执行此操作 如果你能写people firstperson = context.people.OrderBy(x=>x.ID).First() or if you have date inserted or added you can use,请在里面
  6. 。OrderBy(x => x.dateadded)and pick the first element. Make sure you order it in correct way using OrderBy or OrderByDescending`
  7. 将此记录放入变量中,然后在context.remove(firstperson)
  8. 之前致电context.add(new person())

    如果您在空表中执行此操作,您的ID将会增加,但您可以安全地按ID顺序删除,并在每次删除时选择最少的一个。

答案 1 :(得分:0)

与AS         (         选择TOP 1 *         来自MyTable         ) 从A中删除

与INSERT,UPDATE或DELETE一起使用的TOP表达式中引用的行不按任何顺序排列。

因此,您最好使用带有ORDER BY子句的WITH decision,这样您就可以更准确地指定您认为哪一行是第一行。

答案 2 :(得分: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