J'ai une version de DeleteExpiredSessions (fournie par Microsooft) qui utilise Cursor et stocke des données dans des tables temporaires. You can find it hereGestion de session ASP.NET DeleteExpiredSessions Vous semble idiot?
Et voici le code source de procédure stockée
CREATE PROCEDURE [dbo].[DeleteExpiredSessions]
AS
SET NOCOUNT ON
SET DEADLOCK_PRIORITY LOW
DECLARE @now datetime
SET @now = GETUTCDATE()
CREATE TABLE #tblExpiredSessions
(
SessionID nvarchar(88) NOT NULL PRIMARY KEY
)
INSERT #tblExpiredSessions (SessionID)
SELECT SessionID
FROM dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
WHERE Expires < @now
IF @@ROWCOUNT <> 0
BEGIN
DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
FOR SELECT SessionID FROM #tblExpiredSessions
DECLARE @SessionID nvarchar(88)
OPEN ExpiredSessionCursor
FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM dbo.ASPStateTempSessions WHERE SessionID = @SessionID AND Expires < @now
FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID
END
CLOSE ExpiredSessionCursor
DEALLOCATE ExpiredSessionCursor
END
DROP TABLE #tblExpiredSessions
RETURN 0
Je me demande pourquoi il ne supprime pas simplement sessions expirées en utilisant ci-dessous requête:
DELETE [ASPState].dbo.ASPStateTempSessions
WHERE Expires < GETUTCDATE()
pourquoi est-ce trop large?, Il devrait y avoir une raison pour laquelle ils ont mis en œuvre de cette façon ou il est faux. – FLICKER