2013-07-10 4 views
1

J'ai écrit une procédure stockée qui ne pouvait avoir que 100 lignes avec la même CustomerPK, donc si nous voulons insérer la ligne 101, la plus ancienne ligne avec la même CustomerPK doit être supprimée .Procédure stockée pour supprimer des lignes - SQL Server 2008 R2

Je suis sûr qu'il y a plusieurs façons de le faire et je ne suis pas sûr lequel est le meilleur. Voici le code de la procédure.

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

Pourquoi ne pas simplement mettre à jour la plus ancienne ligne, au lieu d'insérer/supprimer – EricZ

+0

@EricZ parce que la plus ancienne ligne peut, dans certains cas extrêmes ne pas être le numéro de ligne 100 –

Répondre

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 
Questions connexes