2013-07-10 6 views
1

Я написал хранимую процедуру, которая разрешает иметь только 100 строк с одинаковыми CustomerPK, поэтому, если мы хотим вставить строку 101, необходимо удалить самую старую строку с тем же CustomerPK ,Сохраненная процедура для удаления строк - SQL Server 2008 R2

Я уверен, что есть несколько способов сделать это, и я не уверен, какой из них лучше. Вот код процедуры.

DECLARE 
    @TokenCount INT; 

SELECT 
    @TokenCount = COUNT(*) 
FROM 
    CustomerAuthTokens 
WHERE 
    CustomerPK = @CustomerPK; 

IF @TokenCount > 99 
BEGIN 
    DELETE FROM CustomerAuthTokens 
    WHERE AuthToken IN (SELECT TOP(@TokenCount - 99) AuthToken 
         FROM CustomerAuthTokens 
         WHERE CustomerPK = @CustomerPK 
         ORDER BY TokenCreateTime ASC); 
END 
+0

Почему не просто обновить старую строку, вместо вставки/удаления – EricZ

+0

@EricZ потому что старейшая строка может в некоторых крайних случаях не может быть строка номером 100 –

ответ

0
--Insert your row first 


-- This will delete customer rows if there are more than 100 rows for that customer 
;WITH cte as 
(
SELECT row_number() over (partition by CustomerPK order by TokenCreateTime desc) rn 
FROM CustomerAuthTokens 
WHERE CustomerPK = @CustomerPK 
) 
DELETE CTE 
WHERE rn > 100 
Смежные вопросы