2015-09-06 3 views
0

Я использую SQL Server 2008 и хотел бы знать, есть ли способ содержать только определенное количество записей в таблице. Старые записи будут автоматически заменены новыми.Таблица с ФИКСИРОВАННЫМ количеством записей

Например, таблица1 должна и всегда содержать 100 записей. Новые записи будут заменены более старыми. Отсчет количества записей в таблице на AnyPoint не должно превышать 100.

+0

Да, это возможно. что ты уже испробовал? –

+0

Если бы мой ответ был полезным, пожалуйста, проголосуйте и/или отметьте как принято, thx! – Shnugo

ответ

1

Если я вас правильно понял вы не хотите выход быть новейшие 100 записей (легко достичь с SELECT TOP 100 [...] ORDER BY YourDateColumn.

Если вы действительно и физически хотите удостовериться, что хранятся 100 новейших записей, а остальные удалены, вы должны использовать триггер.

Некоторые вопросы: Будет ли несколько пользователей (сеансов), которые манипулируют этой таблицей? Будет ли «новейший» изменяться только на INSERT или может ли старая запись стать более новой на UPDATE?

Но я бы подумал об этом! Если у вас нет по-настоящему веской причины для этого, я бы никогда не пошел так ...

Вы никогда не должны пытаться удалить запись физически, на которую еще можно положиться еще одна сессия.

Что бы я сделал:

Используйте «TOP 100» -view для достижения своей цели и регулярно проверяться выполняемое задание, чтобы выбросить старые записи с некоторым похмелья Период.

1

В таком случае вы можете использовать триггер
CREATE TRIGGER InsteadTrigger на [План]
ВМЕСТО ВСТАВКА
AS
НАЧАТЬ

объявить @count Int V выберите @ кол = COUNT (*) из [план]

, если (@count < = 0)

начинает
отключить триггер InsteadTrigger

INSERT INTO [План]
Цвет = Цвет
ОТ вставленной

включить триггер InsteadTrigger
конца
еще
начинает
объявить @LastId INT
выберите @ LastId = COUNT (LastId) из [Plan]
/* LastID будет дополнительный столбец, чтобы сохранить историю в прошлом, так что вы можете обновить следующий столбец */
обновление [План] установлен Color = Цвет, LastId = @ LastId + 1, где Id = Id
конец

END

+0

Позвольте мне попробовать. благодаря – Venkat

Смежные вопросы