Tsql 删除行的存储过程-SQL Server 2008 R2
我编写了一个存储过程,它只允许有100行具有相同的CustomerPK,因此如果我们要插入第101行,则需要删除具有相同CustomerPK的最早的行 我确信有几种方法可以做到这一点,但我不确定哪种方法最好。这是程序的代码Tsql 删除行的存储过程-SQL Server 2008 R2,tsql,stored-procedures,sql-server-2008-r2,Tsql,Stored Procedures,Sql Server 2008 R2,我编写了一个存储过程,它只允许有100行具有相同的CustomerPK,因此如果我们要插入第101行,则需要删除具有相同CustomerPK的最早的行 我确信有几种方法可以做到这一点,但我不确定哪种方法最好。这是程序的代码 DECLARE @TokenCount INT; SELECT @TokenCount = COUNT(*) FROM CustomerAuthTokens WHERE CustomerPK = @CustomerPK; IF @T
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
为什么不更新最旧的行,而不是插入/delete@EricZ因为在某些极端情况下,最旧的行可能不是第100行
--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