私は、Cursorを使用してデータを一時テーブルに格納しているDeleteExpiredSessions(Microsooftが提供)のバージョンを持っています。 You can find it hereASP.NETセッション管理DeleteExpiredSessions愚かなようですか?
そしてこれは、それは単に、クエリの下に使用して期限切れのセッションを削除されていない理由を私は思ったんだけど、ストアドプロシージャ
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
のソースコードです:
コードと思考を通じて探しDELETE [ASPState].dbo.ASPStateTempSessions
WHERE Expires < GETUTCDATE()
なぜこれが広すぎるのですか?この方法で実装された理由があるか、間違っているはずです。 – FLICKER