asp.net session 保存在数据库中

    技术2024-11-18  8

    /*********************************************************************  InstallSqlState.SQL                                                                                                                      Installs the tables, and stored procedures necessary for             supporting ASP.NET session state.                                 

      Copyright Microsoft, Inc.  All Rights Reserved.

     *********************************************************************/

    SET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GO

    PRINT ''PRINT '-----------------------------------------'PRINT 'Starting execution of InstallSqlState.SQL'PRINT '-----------------------------------------'PRINT '--------------------------------------------------'PRINT 'Note:                                             'PRINT 'Do not run this file manually.                    'PRINT 'You should use aspnet_regsql.exe to install       'PRINT 'and uninstall SQL session state.                  'PRINT ''PRINT 'Run ''aspnet_regsql.exe -?'' for details.         'PRINT '--------------------------------------------------'GO

    /*****************************************************************************/

    USE masterGO

    /* Create and populate the session state database */

    IF DB_ID(N'ASPState') IS NULL BEGIN    DECLARE @cmd nvarchar(500)    SET @cmd = N'CREATE DATABASE [ASPState]'    EXEC(@cmd)END    GO

    /* Drop all tables, startup procedures, stored procedures and types. */

    /* Drop the DeleteExpiredSessions_Job */

    DECLARE @jobname nvarchar(200)SET @jobname = N'ASPState' + '_Job_DeleteExpiredSessions'

    -- Delete the [local] job -- We expected to get an error if the job doesn't exist.PRINT 'If the job does not exist, an error from msdb.dbo.sp_delete_job is expected.'

    EXECUTE msdb.dbo.sp_delete_job @job_name = @jobnameGO

    DECLARE @sstype nvarchar(128)SET @sstype = N'sstype_temp'

    IF UPPER(@sstype) = 'SSTYPE_TEMP' AND OBJECT_ID(N'dbo.ASPState_Startup', 'P') IS NOT NULL BEGIN    DROP PROCEDURE dbo.ASPState_StartupEND   

    USE [tempdb]GO

    IF OBJECT_ID(N'dbo.ASPStateTempSessions','U') IS NOT NULL BEGIN    DROP TABLE dbo.ASPStateTempSessionsEND

    IF OBJECT_ID(N'dbo.ASPStateTempApplications','U') IS NOT NULL BEGIN    DROP TABLE dbo.ASPStateTempApplicationsEND

    USE [ASPState]GO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'GetMajorVersion') AND (type = 'P')))    DROP PROCEDURE [dbo].GetMajorVersionGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'CreateTempTables') AND (type = 'P')))    DROP PROCEDURE [dbo].CreateTempTablesGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetVersion') AND (type = 'P')))    DROP PROCEDURE [dbo].TempGetVersionGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'GetHashCode') AND (type = 'P')))    DROP PROCEDURE [dbo].GetHashCodeGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetAppID') AND (type = 'P')))    DROP PROCEDURE [dbo].TempGetAppIDGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem') AND (type = 'P')))    DROP PROCEDURE [dbo].TempGetStateItemGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem2') AND (type = 'P')))    DROP PROCEDURE [dbo].TempGetStateItem2GO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem3') AND (type = 'P')))    DROP PROCEDURE [dbo].TempGetStateItem3GO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusive') AND (type = 'P')))    DROP PROCEDURE [dbo].TempGetStateItemExclusiveGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusive2') AND (type = 'P')))    DROP PROCEDURE [dbo].TempGetStateItemExclusive2GO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusive3') AND (type = 'P')))    DROP PROCEDURE [dbo].TempGetStateItemExclusive3GO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempReleaseStateItemExclusive') AND (type = 'P')))    DROP PROCEDURE [dbo].TempReleaseStateItemExclusiveGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertUninitializedItem') AND (type = 'P')))    DROP PROCEDURE [dbo].TempInsertUninitializedItemGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertStateItemShort') AND (type = 'P')))    DROP PROCEDURE [dbo].TempInsertStateItemShortGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertStateItemLong') AND (type = 'P')))    DROP PROCEDURE [dbo].TempInsertStateItemLongGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemShort') AND (type = 'P')))    DROP PROCEDURE [dbo].TempUpdateStateItemShortGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemShortNullLong') AND (type = 'P')))    DROP PROCEDURE [dbo].TempUpdateStateItemShortNullLongGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemLong') AND (type = 'P')))    DROP PROCEDURE [dbo].TempUpdateStateItemLongGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemLongNullShort') AND (type = 'P')))    DROP PROCEDURE [dbo].TempUpdateStateItemLongNullShortGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempRemoveStateItem') AND (type = 'P')))    DROP PROCEDURE [dbo].TempRemoveStateItemGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempResetTimeout') AND (type = 'P')))    DROP PROCEDURE [dbo].TempResetTimeoutGO

    IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'DeleteExpiredSessions') AND (type = 'P')))    DROP PROCEDURE [dbo].DeleteExpiredSessionsGO

    IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionId')    EXECUTE sp_droptype tSessionIdGO

    IF EXISTS(SELECT name FROM systypes WHERE name ='tAppName')    EXECUTE sp_droptype tAppNameGO

    IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionItemShort')    EXECUTE sp_droptype tSessionItemShortGO

    IF EXISTS(SELECT name FROM systypes WHERE name ='tSessionItemLong')    EXECUTE sp_droptype tSessionItemLongGO

    IF EXISTS(SELECT name FROM systypes WHERE name ='tTextPtr')    EXECUTE sp_droptype tTextPtrGO

    /*****************************************************************************/

    CREATE PROCEDURE dbo.GetMajorVersion    @@ver int OUTPUTASBEGIN DECLARE @version        nchar(100) DECLARE @dot            int DECLARE @hyphen         int DECLARE @SqlToExec      nchar(4000)

     SELECT @@ver = 7 SELECT @version = @@Version SELECT @hyphen  = CHARINDEX(N' - ', @version) IF (NOT(@hyphen IS NULL) AND @hyphen > 0) BEGIN  SELECT @hyphen = @hyphen + 3  SELECT @dot    = CHARINDEX(N'.', @version, @hyphen)  IF (NOT(@dot IS NULL) AND @dot > @hyphen)  BEGIN   SELECT @version = SUBSTRING(@version, @hyphen, @dot - @hyphen)   SELECT @@ver     = CONVERT(int, @version)  END ENDENDGO  

    /*****************************************************************************/

    USE [ASPState]

    /* Find out the version */DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUT

    DECLARE @cmd nchar(4000)

    IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.CreateTempTables        AS            CREATE TABLE [tempdb].dbo.ASPStateTempSessions (                SessionId           nvarchar(88)    NOT NULL PRIMARY KEY,                Created             datetime        NOT NULL DEFAULT GETUTCDATE(),                Expires             datetime        NOT NULL,                LockDate            datetime        NOT NULL,                LockDateLocal       datetime        NOT NULL,                LockCookie          int             NOT NULL,                Timeout             int             NOT NULL,                Locked              bit             NOT NULL,                SessionItemShort    VARBINARY(7000) NULL,                SessionItemLong     image           NULL,                Flags               int             NOT NULL DEFAULT 0,            )

                CREATE NONCLUSTERED INDEX Index_Expires ON [tempdb].dbo.ASPStateTempSessions(Expires)

                CREATE TABLE [tempdb].dbo.ASPStateTempApplications (                AppId               int             NOT NULL PRIMARY KEY,                AppName             char(280)       NOT NULL,            )

                CREATE NONCLUSTERED INDEX Index_AppName ON [tempdb].dbo.ASPStateTempApplications(AppName)

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.CreateTempTables        AS            CREATE TABLE [tempdb].dbo.ASPStateTempSessions (                SessionId           nvarchar(88)    NOT NULL PRIMARY KEY,                Created             datetime        NOT NULL DEFAULT GETDATE(),                Expires             datetime        NOT NULL,                LockDate            datetime        NOT NULL,                LockCookie          int             NOT NULL,                Timeout             int             NOT NULL,                Locked              bit             NOT NULL,                SessionItemShort    VARBINARY(7000) NULL,                SessionItemLong     image           NULL,                Flags               int             NOT NULL DEFAULT 0,            )

                CREATE NONCLUSTERED INDEX Index_Expires ON [tempdb].dbo.ASPStateTempSessions(Expires)

                CREATE TABLE [tempdb].dbo.ASPStateTempApplications (                AppId               int             NOT NULL PRIMARY KEY,                AppName             char(280)       NOT NULL,            )

                CREATE NONCLUSTERED INDEX Index_AppName ON [tempdb].dbo.ASPStateTempApplications(AppName)

                RETURN 0'

    EXEC (@cmd)GO  

    /*****************************************************************************/

    EXECUTE sp_addtype tSessionId, 'nvarchar(88)',  'NOT NULL'GO

    EXECUTE sp_addtype tAppName, 'varchar(280)', 'NOT NULL'GO

    EXECUTE sp_addtype tSessionItemShort, 'varbinary(7000)'GO

    EXECUTE sp_addtype tSessionItemLong, 'image'GO

    EXECUTE sp_addtype tTextPtr, 'varbinary(16)'GO

    /*****************************************************************************/

    CREATE PROCEDURE dbo.TempGetVersion    @ver      char(10) OUTPUTAS    SELECT @ver = "2"    RETURN 0GO

    /*****************************************************************************/

    CREATE PROCEDURE dbo.GetHashCode    @input tAppName,    @hash int OUTPUTAS    /*        This sproc is based on this C# hash function:

            int GetHashCode(string s)        {            int     hash = 5381;            int     len = s.Length;

                for (int i = 0; i < len; i++) {                int     c = Convert.ToInt32(s[i]);                hash = ((hash << 5) + hash) ^ c;            }

                return hash;        }

            However, SQL 7 doesn't provide a 32-bit integer        type that allows rollover of bits, we have to        divide our 32bit integer into the upper and lower        16 bits to do our calculation.    */           DECLARE @hi_16bit   int    DECLARE @lo_16bit   int    DECLARE @hi_t       int    DECLARE @lo_t       int    DECLARE @len        int    DECLARE @i          int    DECLARE @c          int    DECLARE @carry      int

        SET @hi_16bit = 0    SET @lo_16bit = 5381        SET @len = DATALENGTH(@input)    SET @i = 1        WHILE (@i <= @len)    BEGIN        SET @c = ASCII(SUBSTRING(@input, @i, 1))

            /* Formula:                                   hash = ((hash << 5) + hash) ^ c */

            /* hash << 5 */        SET @hi_t = @hi_16bit * 32 /* high 16bits << 5 */        SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */                SET @lo_t = @lo_16bit * 32 /* low 16bits << 5 */                SET @carry = @lo_16bit & 0x1F0000 /* move low 16bits carryover to hi 16bits */        SET @carry = @carry / 0x10000 /* >> 16 */        SET @hi_t = @hi_t + @carry        SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */

            /* + hash */        SET @lo_16bit = @lo_16bit + @lo_t        SET @hi_16bit = @hi_16bit + @hi_t + (@lo_16bit / 0x10000)        /* delay clearing the overflow */

            /* ^c */        SET @lo_16bit = @lo_16bit ^ @c

            /* Now clear the overflow bits */         SET @hi_16bit = @hi_16bit & 0xFFFF        SET @lo_16bit = @lo_16bit & 0xFFFF

            SET @i = @i + 1    END

        /* Do a sign extension of the hi-16bit if needed */    IF (@hi_16bit & 0x8000 <> 0)        SET @hi_16bit = 0xFFFF0000 | @hi_16bit

        /* Merge hi and lo 16bit back together */    SET @hi_16bit = @hi_16bit * 0x10000 /* << 16 */    SET @hash = @hi_16bit | @lo_16bit

        RETURN 0GO

    /*****************************************************************************/

    DECLARE @cmd nchar(4000)

    SET @cmd = N'    CREATE PROCEDURE dbo.TempGetAppID    @appName    tAppName,    @appId      int OUTPUT    AS    SET @appName = LOWER(@appName)    SET @appId = NULL

        SELECT @appId = AppId    FROM [tempdb].dbo.ASPStateTempApplications    WHERE AppName = @appName

        IF @appId IS NULL BEGIN        BEGIN TRAN       

            SELECT @appId = AppId        FROM [tempdb].dbo.ASPStateTempApplications WITH (TABLOCKX)        WHERE AppName = @appName                IF @appId IS NULL        BEGIN            EXEC GetHashCode @appName, @appId OUTPUT                        INSERT [tempdb].dbo.ASPStateTempApplications            VALUES            (@appId, @appName)                        IF @@ERROR = 2627             BEGIN                DECLARE @dupApp tAppName                            SELECT @dupApp = RTRIM(AppName)                FROM [tempdb].dbo.ASPStateTempApplications                 WHERE AppId = @appId                                RAISERROR(''SQL session state fatal error: hash-code collision between applications ''''%s'''' and ''''%s''''. Please rename the 1st application to resolve the problem.'',                             18, 1, @appName, @dupApp)            END        END

            COMMIT    END

        RETURN 0'EXEC(@cmd)    GO

    /*****************************************************************************/

    /* Find out the version */

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempGetStateItem            @id         tSessionId,            @itemShort  tSessionItemShort OUTPUT,            @locked     bit OUTPUT,            @lockDate   datetime OUTPUT,            @lockCookie int OUTPUT        AS            DECLARE @textptr AS tTextPtr            DECLARE @length AS int            DECLARE @now AS datetime            SET @now = GETUTCDATE()

                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, @now),                 @locked = Locked,                @lockDate = LockDateLocal,                @lockCookie = LockCookie,                @itemShort = CASE @locked                    WHEN 0 THEN SessionItemShort                    ELSE NULL                    END,                @textptr = CASE @locked                    WHEN 0 THEN TEXTPTR(SessionItemLong)                    ELSE NULL                    END,                @length = CASE @locked                    WHEN 0 THEN DATALENGTH(SessionItemLong)                    ELSE NULL                    END            WHERE SessionId = @id            IF @length IS NOT NULL BEGIN                READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length            END

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempGetStateItem            @id         tSessionId,            @itemShort  tSessionItemShort OUTPUT,            @locked     bit OUTPUT,            @lockDate   datetime OUTPUT,            @lockCookie int OUTPUT        AS            DECLARE @textptr AS tTextPtr            DECLARE @length AS int            DECLARE @now AS datetime            SET @now = GETDATE()

                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, @now),                 @locked = Locked,                @lockDate = LockDate,                @lockCookie = LockCookie,                @itemShort = CASE @locked                    WHEN 0 THEN SessionItemShort                    ELSE NULL                    END,                @textptr = CASE @locked                    WHEN 0 THEN TEXTPTR(SessionItemLong)                    ELSE NULL                    END,                @length = CASE @locked                    WHEN 0 THEN DATALENGTH(SessionItemLong)                    ELSE NULL                    END            WHERE SessionId = @id            IF @length IS NOT NULL BEGIN                READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length            END

                RETURN 0'    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempGetStateItem2            @id         tSessionId,            @itemShort  tSessionItemShort OUTPUT,            @locked     bit OUTPUT,            @lockAge    int OUTPUT,            @lockCookie int OUTPUT        AS            DECLARE @textptr AS tTextPtr            DECLARE @length AS int            DECLARE @now AS datetime            SET @now = GETUTCDATE()

                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, @now),                 @locked = Locked,                @lockAge = DATEDIFF(second, LockDate, @now),                @lockCookie = LockCookie,                @itemShort = CASE @locked                    WHEN 0 THEN SessionItemShort                    ELSE NULL                    END,                @textptr = CASE @locked                    WHEN 0 THEN TEXTPTR(SessionItemLong)                    ELSE NULL                    END,                @length = CASE @locked                    WHEN 0 THEN DATALENGTH(SessionItemLong)                    ELSE NULL                    END            WHERE SessionId = @id            IF @length IS NOT NULL BEGIN                READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length            END

                RETURN 0'

    EXEC (@cmd)    GO           

    /*****************************************************************************/

    /* Find out the version */

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempGetStateItem3            @id         tSessionId,            @itemShort  tSessionItemShort OUTPUT,            @locked     bit OUTPUT,            @lockAge    int OUTPUT,            @lockCookie int OUTPUT,            @actionFlags int OUTPUT        AS            DECLARE @textptr AS tTextPtr            DECLARE @length AS int            DECLARE @now AS datetime            SET @now = GETUTCDATE()

                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, @now),                 @locked = Locked,                @lockAge = DATEDIFF(second, LockDate, @now),                @lockCookie = LockCookie,                @itemShort = CASE @locked                    WHEN 0 THEN SessionItemShort                    ELSE NULL                    END,                @textptr = CASE @locked                    WHEN 0 THEN TEXTPTR(SessionItemLong)                    ELSE NULL                    END,                @length = CASE @locked                    WHEN 0 THEN DATALENGTH(SessionItemLong)                    ELSE NULL                    END,

                    /* If the Uninitialized flag (0x1) if it is set,                   remove it and return InitializeItem (0x1) in actionFlags */                Flags = CASE                    WHEN (Flags & 1) <> 0 THEN (Flags & ~1)                    ELSE Flags                    END,                @actionFlags = CASE                    WHEN (Flags & 1) <> 0 THEN 1                    ELSE 0                    END            WHERE SessionId = @id            IF @length IS NOT NULL BEGIN                READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length            END

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempGetStateItem3            @id         tSessionId,            @itemShort  tSessionItemShort OUTPUT,            @locked     bit OUTPUT,            @lockDate   datetime OUTPUT,            @lockCookie int OUTPUT,            @actionFlags int OUTPUT        AS            DECLARE @textptr AS tTextPtr            DECLARE @length AS int            DECLARE @now AS datetime            SET @now = GETDATE()

                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, @now),                 @locked = Locked,                @lockDate = LockDate,                @lockCookie = LockCookie,                @itemShort = CASE @locked                    WHEN 0 THEN SessionItemShort                    ELSE NULL                    END,                @textptr = CASE @locked                    WHEN 0 THEN TEXTPTR(SessionItemLong)                    ELSE NULL                    END,                @length = CASE @locked                    WHEN 0 THEN DATALENGTH(SessionItemLong)                    ELSE NULL                    END,

                    /* If the Uninitialized flag (0x1) if it is set,                   remove it and return InitializeItem (0x1) in actionFlags */                Flags = CASE                    WHEN (Flags & 1) <> 0 THEN (Flags & ~1)                    ELSE Flags                    END,                @actionFlags = CASE                    WHEN (Flags & 1) <> 0 THEN 1                    ELSE 0                    END            WHERE SessionId = @id            IF @length IS NOT NULL BEGIN                READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length            END

                RETURN 0'    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempGetStateItemExclusive            @id         tSessionId,            @itemShort  tSessionItemShort OUTPUT,            @locked     bit OUTPUT,            @lockDate   datetime OUTPUT,            @lockCookie int OUTPUT        AS            DECLARE @textptr AS tTextPtr            DECLARE @length AS int            DECLARE @now AS datetime            DECLARE @nowLocal AS datetime

                SET @now = GETUTCDATE()            SET @nowLocal = GETDATE()                        UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, @now),                 LockDate = CASE Locked                    WHEN 0 THEN @now                    ELSE LockDate                    END,                @lockDate = LockDateLocal = CASE Locked                    WHEN 0 THEN @nowLocal                    ELSE LockDateLocal                    END,                @lockCookie = LockCookie = CASE Locked                    WHEN 0 THEN LockCookie + 1                    ELSE LockCookie                    END,                @itemShort = CASE Locked                    WHEN 0 THEN SessionItemShort                    ELSE NULL                    END,                @textptr = CASE Locked                    WHEN 0 THEN TEXTPTR(SessionItemLong)                    ELSE NULL                    END,                @length = CASE Locked                    WHEN 0 THEN DATALENGTH(SessionItemLong)                    ELSE NULL                    END,                @locked = Locked,                Locked = 1            WHERE SessionId = @id            IF @length IS NOT NULL BEGIN                READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length            END

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempGetStateItemExclusive            @id         tSessionId,            @itemShort  tSessionItemShort OUTPUT,            @locked     bit OUTPUT,            @lockDate   datetime OUTPUT,            @lockCookie int OUTPUT        AS            DECLARE @textptr AS tTextPtr            DECLARE @length AS int            DECLARE @now AS datetime

                SET @now = GETDATE()            UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, @now),                 @lockDate = LockDate = CASE Locked                    WHEN 0 THEN @now                    ELSE LockDate                    END,                @lockCookie = LockCookie = CASE Locked                    WHEN 0 THEN LockCookie + 1                    ELSE LockCookie                    END,                @itemShort = CASE Locked                    WHEN 0 THEN SessionItemShort                    ELSE NULL                    END,                @textptr = CASE Locked                    WHEN 0 THEN TEXTPTR(SessionItemLong)                    ELSE NULL                    END,                @length = CASE Locked                    WHEN 0 THEN DATALENGTH(SessionItemLong)                    ELSE NULL                    END,                @locked = Locked,                Locked = 1            WHERE SessionId = @id            IF @length IS NOT NULL BEGIN                READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length            END

                RETURN 0'   

    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempGetStateItemExclusive2            @id         tSessionId,            @itemShort  tSessionItemShort OUTPUT,            @locked     bit OUTPUT,            @lockAge    int OUTPUT,            @lockCookie int OUTPUT        AS            DECLARE @textptr AS tTextPtr            DECLARE @length AS int            DECLARE @now AS datetime            DECLARE @nowLocal AS datetime

                SET @now = GETUTCDATE()            SET @nowLocal = GETDATE()                        UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, @now),                 LockDate = CASE Locked                    WHEN 0 THEN @now                    ELSE LockDate                    END,                LockDateLocal = CASE Locked                    WHEN 0 THEN @nowLocal                    ELSE LockDateLocal                    END,                @lockAge = CASE Locked                    WHEN 0 THEN 0                    ELSE DATEDIFF(second, LockDate, @now)                    END,                @lockCookie = LockCookie = CASE Locked                    WHEN 0 THEN LockCookie + 1                    ELSE LockCookie                    END,                @itemShort = CASE Locked                    WHEN 0 THEN SessionItemShort                    ELSE NULL                    END,                @textptr = CASE Locked                    WHEN 0 THEN TEXTPTR(SessionItemLong)                    ELSE NULL                    END,                @length = CASE Locked                    WHEN 0 THEN DATALENGTH(SessionItemLong)                    ELSE NULL                    END,                @locked = Locked,                Locked = 1            WHERE SessionId = @id            IF @length IS NOT NULL BEGIN                READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length            END

                RETURN 0'

    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempGetStateItemExclusive3            @id         tSessionId,            @itemShort  tSessionItemShort OUTPUT,            @locked     bit OUTPUT,            @lockAge    int OUTPUT,            @lockCookie int OUTPUT,            @actionFlags int OUTPUT        AS            DECLARE @textptr AS tTextPtr            DECLARE @length AS int            DECLARE @now AS datetime            DECLARE @nowLocal AS datetime

                SET @now = GETUTCDATE()            SET @nowLocal = GETDATE()                        UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, @now),                 LockDate = CASE Locked                    WHEN 0 THEN @now                    ELSE LockDate                    END,                LockDateLocal = CASE Locked                    WHEN 0 THEN @nowLocal                    ELSE LockDateLocal                    END,                @lockAge = CASE Locked                    WHEN 0 THEN 0                    ELSE DATEDIFF(second, LockDate, @now)                    END,                @lockCookie = LockCookie = CASE Locked                    WHEN 0 THEN LockCookie + 1                    ELSE LockCookie                    END,                @itemShort = CASE Locked                    WHEN 0 THEN SessionItemShort                    ELSE NULL                    END,                @textptr = CASE Locked                    WHEN 0 THEN TEXTPTR(SessionItemLong)                    ELSE NULL                    END,                @length = CASE Locked                    WHEN 0 THEN DATALENGTH(SessionItemLong)                    ELSE NULL                    END,                @locked = Locked,                Locked = 1,

                    /* If the Uninitialized flag (0x1) if it is set,                   remove it and return InitializeItem (0x1) in actionFlags */                Flags = CASE                    WHEN (Flags & 1) <> 0 THEN (Flags & ~1)                    ELSE Flags                    END,                @actionFlags = CASE                    WHEN (Flags & 1) <> 0 THEN 1                    ELSE 0                    END            WHERE SessionId = @id            IF @length IS NOT NULL BEGIN                READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length            END

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempGetStateItemExclusive3            @id         tSessionId,            @itemShort  tSessionItemShort OUTPUT,            @locked     bit OUTPUT,            @lockDate   datetime OUTPUT,            @lockCookie int OUTPUT,            @actionFlags int OUTPUT        AS            DECLARE @textptr AS tTextPtr            DECLARE @length AS int            DECLARE @now AS datetime

                SET @now = GETDATE()            UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, @now),                 @lockDate = LockDate = CASE Locked                    WHEN 0 THEN @now                    ELSE LockDate                    END,                @lockCookie = LockCookie = CASE Locked                    WHEN 0 THEN LockCookie + 1                    ELSE LockCookie                    END,                @itemShort = CASE Locked                    WHEN 0 THEN SessionItemShort                    ELSE NULL                    END,                @textptr = CASE Locked                    WHEN 0 THEN TEXTPTR(SessionItemLong)                    ELSE NULL                    END,                @length = CASE Locked                    WHEN 0 THEN DATALENGTH(SessionItemLong)                    ELSE NULL                    END,                @locked = Locked,                Locked = 1,

                    /* If the Uninitialized flag (0x1) if it is set,                   remove it and return InitializeItem (0x1) in actionFlags */                Flags = CASE                    WHEN (Flags & 1) <> 0 THEN (Flags & ~1)                    ELSE Flags                    END,                @actionFlags = CASE                    WHEN (Flags & 1) <> 0 THEN 1                    ELSE 0                    END            WHERE SessionId = @id            IF @length IS NOT NULL BEGIN                READTEXT [tempdb].dbo.ASPStateTempSessions.SessionItemLong @textptr 0 @length            END

                RETURN 0'   

    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempReleaseStateItemExclusive            @id         tSessionId,            @lockCookie int        AS            UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETUTCDATE()),                 Locked = 0            WHERE SessionId = @id AND LockCookie = @lockCookie

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempReleaseStateItemExclusive            @id         tSessionId,            @lockCookie int        AS            UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETDATE()),                 Locked = 0            WHERE SessionId = @id AND LockCookie = @lockCookie

                RETURN 0'

    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempInsertUninitializedItem            @id         tSessionId,            @itemShort  tSessionItemShort,            @timeout    int        AS   

                DECLARE @now AS datetime            DECLARE @nowLocal AS datetime                        SET @now = GETUTCDATE()            SET @nowLocal = GETDATE()

                INSERT [tempdb].dbo.ASPStateTempSessions                 (SessionId,                  SessionItemShort,                  Timeout,                  Expires,                  Locked,                  LockDate,                 LockDateLocal,                 LockCookie,                 Flags)             VALUES                 (@id,                  @itemShort,                  @timeout,                  DATEADD(n, @timeout, @now),                  0,                  @now,                 @nowLocal,                 1,                 1)

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempInsertUninitializedItem            @id         tSessionId,            @itemShort  tSessionItemShort,            @timeout    int        AS   

                DECLARE @now AS datetime            SET @now = GETDATE()

                INSERT [tempdb].dbo.ASPStateTempSessions                 (SessionId,                  SessionItemShort,                  Timeout,                  Expires,                  Locked,                  LockDate,                 LockCookie,                 Flags)             VALUES                 (@id,                  @itemShort,                  @timeout,                  DATEADD(n, @timeout, @now),                  0,                  @now,                 1,                 1)

                RETURN 0'

    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempInsertStateItemShort            @id         tSessionId,            @itemShort  tSessionItemShort,            @timeout    int        AS   

                DECLARE @now AS datetime            DECLARE @nowLocal AS datetime                        SET @now = GETUTCDATE()            SET @nowLocal = GETDATE()

                INSERT [tempdb].dbo.ASPStateTempSessions                 (SessionId,                  SessionItemShort,                  Timeout,                  Expires,                  Locked,                  LockDate,                 LockDateLocal,                 LockCookie)             VALUES                 (@id,                  @itemShort,                  @timeout,                  DATEADD(n, @timeout, @now),                  0,                  @now,                 @nowLocal,                 1)

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempInsertStateItemShort            @id         tSessionId,            @itemShort  tSessionItemShort,            @timeout    int        AS   

                DECLARE @now AS datetime            SET @now = GETDATE()

                INSERT [tempdb].dbo.ASPStateTempSessions                 (SessionId,                  SessionItemShort,                  Timeout,                  Expires,                  Locked,                  LockDate,                 LockCookie)             VALUES                 (@id,                  @itemShort,                  @timeout,                  DATEADD(n, @timeout, @now),                  0,                  @now,                 1)

                RETURN 0'

    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempInsertStateItemLong            @id         tSessionId,            @itemLong   tSessionItemLong,            @timeout    int        AS                DECLARE @now AS datetime            DECLARE @nowLocal AS datetime                        SET @now = GETUTCDATE()            SET @nowLocal = GETDATE()

                INSERT [tempdb].dbo.ASPStateTempSessions                 (SessionId,                  SessionItemLong,                  Timeout,                  Expires,                  Locked,                  LockDate,                 LockDateLocal,                 LockCookie)             VALUES                 (@id,                  @itemLong,                  @timeout,                  DATEADD(n, @timeout, @now),                  0,                  @now,                 @nowLocal,                 1)

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempInsertStateItemLong            @id         tSessionId,            @itemLong   tSessionItemLong,            @timeout    int        AS                DECLARE @now AS datetime            SET @now = GETDATE()

                INSERT [tempdb].dbo.ASPStateTempSessions                 (SessionId,                  SessionItemLong,                  Timeout,                  Expires,                  Locked,                  LockDate,                 LockCookie)             VALUES                 (@id,                  @itemLong,                  @timeout,                  DATEADD(n, @timeout, @now),                  0,                  @now,                 1)

                RETURN 0'

    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempUpdateStateItemShort            @id         tSessionId,            @itemShort  tSessionItemShort,            @timeout    int,            @lockCookie int        AS                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETUTCDATE()),                 SessionItemShort = @itemShort,                 Timeout = @timeout,                Locked = 0            WHERE SessionId = @id AND LockCookie = @lockCookie

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempUpdateStateItemShort            @id         tSessionId,            @itemShort  tSessionItemShort,            @timeout    int,            @lockCookie int        AS                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETDATE()),                 SessionItemShort = @itemShort,                 Timeout = @timeout,                Locked = 0            WHERE SessionId = @id AND LockCookie = @lockCookie

                RETURN 0'

    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempUpdateStateItemShortNullLong            @id         tSessionId,            @itemShort  tSessionItemShort,            @timeout    int,            @lockCookie int        AS                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETUTCDATE()),                 SessionItemShort = @itemShort,                 SessionItemLong = NULL,                 Timeout = @timeout,                Locked = 0            WHERE SessionId = @id AND LockCookie = @lockCookie

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempUpdateStateItemShortNullLong            @id         tSessionId,            @itemShort  tSessionItemShort,            @timeout    int,            @lockCookie int        AS                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETDATE()),                 SessionItemShort = @itemShort,                 SessionItemLong = NULL,                 Timeout = @timeout,                Locked = 0            WHERE SessionId = @id AND LockCookie = @lockCookie

                RETURN 0'

    EXEC (@cmd)    GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempUpdateStateItemLong            @id         tSessionId,            @itemLong   tSessionItemLong,            @timeout    int,            @lockCookie int        AS                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETUTCDATE()),                 SessionItemLong = @itemLong,                Timeout = @timeout,                Locked = 0            WHERE SessionId = @id AND LockCookie = @lockCookie

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempUpdateStateItemLong            @id         tSessionId,            @itemLong   tSessionItemLong,            @timeout    int,            @lockCookie int        AS                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETDATE()),                 SessionItemLong = @itemLong,                Timeout = @timeout,                Locked = 0            WHERE SessionId = @id AND LockCookie = @lockCookie

                RETURN 0'

    EXEC (@cmd)            GO

    /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempUpdateStateItemLongNullShort            @id         tSessionId,            @itemLong   tSessionItemLong,            @timeout    int,            @lockCookie int        AS                UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETUTCDATE()),                 SessionItemLong = @itemLong,                 SessionItemShort = NULL,                Timeout = @timeout,                Locked = 0            WHERE SessionId = @id AND LockCookie = @lockCookie

                RETURN 0'ELSE    SET @cmd = N'    CREATE PROCEDURE dbo.TempUpdateStateItemLongNullShort        @id         tSessionId,        @itemLong   tSessionItemLong,        @timeout    int,        @lockCookie int    AS            UPDATE [tempdb].dbo.ASPStateTempSessions        SET Expires = DATEADD(n, Timeout, GETDATE()),             SessionItemLong = @itemLong,             SessionItemShort = NULL,            Timeout = @timeout,            Locked = 0        WHERE SessionId = @id AND LockCookie = @lockCookie

            RETURN 0'

    EXEC (@cmd)            GO

    /*****************************************************************************/

    DECLARE @cmd nchar(4000)SET @cmd = N'    CREATE PROCEDURE dbo.TempRemoveStateItem        @id     tSessionId,        @lockCookie int    AS        DELETE [tempdb].dbo.ASPStateTempSessions        WHERE SessionId = @id AND LockCookie = @lockCookie        RETURN 0'EXEC(@cmd)    GO            /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.TempResetTimeout            @id     tSessionId        AS            UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETUTCDATE())            WHERE SessionId = @id            RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.TempResetTimeout            @id     tSessionId        AS            UPDATE [tempdb].dbo.ASPStateTempSessions            SET Expires = DATEADD(n, Timeout, GETDATE())            WHERE SessionId = @id            RETURN 0'

    EXEC (@cmd)            GO

                /*****************************************************************************/

    DECLARE @ver intEXEC dbo.GetMajorVersion @@ver=@ver OUTPUTDECLARE @cmd nchar(4000)IF (@ver >= 8)    SET @cmd = N'        CREATE PROCEDURE dbo.DeleteExpiredSessions        AS            DECLARE @now datetime            SET @now = GETUTCDATE()

                DELETE [tempdb].dbo.ASPStateTempSessions            WHERE Expires < @now

                RETURN 0'ELSE    SET @cmd = N'        CREATE PROCEDURE dbo.DeleteExpiredSessions        AS            DECLARE @now datetime            SET @now = GETDATE()

                DELETE [tempdb].dbo.ASPStateTempSessions            WHERE Expires < @now

                RETURN 0'

    EXEC (@cmd)            GO            /*****************************************************************************/

    EXECUTE dbo.CreateTempTablesGO

    USE masterGO

    DECLARE @sstype nvarchar(128)SET @sstype = N'sstype_temp'

    IF UPPER(@sstype) = 'SSTYPE_TEMP' BEGIN    DECLARE @cmd nchar(4000)

        SET @cmd = N'        /* Create the startup procedure */        CREATE PROCEDURE dbo.ASPState_Startup         AS            EXECUTE ASPState.dbo.CreateTempTables

                RETURN 0'    EXEC(@cmd)    EXECUTE sp_procoption @ProcName='dbo.ASPState_Startup', @OptionName='startup', @OptionValue='true'END   

    /*****************************************************************************/

    /* Create the job to delete expired sessions */

    -- Add job category-- We expect an error if the category already exists.PRINT 'If the category already exists, an error from msdb.dbo.sp_add_category is expected.'EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'GO

    BEGIN TRANSACTION                DECLARE @JobID BINARY(16)      DECLARE @ReturnCode int        DECLARE @nameT nchar(200)    SELECT @ReturnCode = 0    

        -- Add the job    SET @nameT = N'ASPState' + '_Job_DeleteExpiredSessions'    EXECUTE @ReturnCode = msdb.dbo.sp_add_job             @job_id = @JobID OUTPUT,             @job_name = @nameT,             @owner_login_name = NULL,             @description = N'Deletes expired sessions from the session state database.',             @category_name = N'[Uncategorized (Local)]',             @enabled = 1,             @notify_level_email = 0,             @notify_level_page = 0,             @notify_level_netsend = 0,             @notify_level_eventlog = 0,             @delete_level= 0

        IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback         -- Add the job steps    SET @nameT = N'ASPState' + '_JobStep_DeleteExpiredSessions'    EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep             @job_id = @JobID,            @step_id = 1,             @step_name = @nameT,             @command = N'EXECUTE DeleteExpiredSessions',             @database_name = N'ASPState',             @server = N'',             @subsystem = N'TSQL',             @cmdexec_success_code = 0,             @flags = 0,             @retry_attempts = 0,             @retry_interval = 1,             @output_file_name = N'',             @on_success_step_id = 0,             @on_success_action = 1,             @on_fail_step_id = 0,             @on_fail_action = 2

        IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

        EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback         -- Add the job schedules    SET @nameT = N'ASPState' + '_JobSchedule_DeleteExpiredSessions'    EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule             @job_id = @JobID,             @name = @nameT,             @enabled = 1,             @freq_type = 4,                 @active_start_date = 20001016,             @active_start_time = 0,             @freq_interval = 1,             @freq_subday_type = 4,             @freq_subday_interval = 1,             @freq_relative_interval = 0,             @freq_recurrence_factor = 0,             @active_end_date = 99991231,             @active_end_time = 235959

        IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback         -- Add the Target Servers    EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)'     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback         COMMIT TRANSACTION              GOTO   EndSave              QuitWithRollback:    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: GO

    /*************************************************************//*************************************************************//*************************************************************//*************************************************************/

    PRINT ''PRINT '------------------------------------------'PRINT 'Completed execution of InstallSqlState.SQL'PRINT '------------------------------------------'

     

      <sessionState mode="SQLServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="Server=.;uid=sa;pwd=123;" cookieless="false" timeout="900"/>

     

    最新回复(0)