2013-11-29 43 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