2013-07-10 69 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 
相關問題