Merhaba Arkadaşlar.
Session verilerini MSSQL server üzerinde kullanmak sitemizde ciddi bir performans artışı ve login sürelerinin istediğiniz ölçüde uzatılmasını sağlar.
Daha önceki yazılarımızda asp.net session verileri mssql üzerinde kullanmayı anlatmıştık fakat sitemiz bir hosting kullanıyorsa kafamıza göre istediğimiz veritabanını ve iznini kullanamamaktayız.
Bu nedenle aşağıdaki adımları izleyerek hosting üzerindeki bir çok sys fonksiyonunu kullanmadan kendi başımıza session verilerini kurabiliriz.
1ADIM :Session databasini kurmak.
-önce hosting panelinden veritabanıadı , kullanıcı adı ve şifre bilgilerini oluşturmalız.
-daha sonra hangi framework kullanıyorsak  onun altındaki dosyayı çalıştırmalız
C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regsql.exe -S 
veritabanı_adı_adresi
 -U 
kullanıcı_adı -P 
sifre -A all -d 
database_adı
-----------------------------------------------------------------------------------------------------
Microsoft (R) ASP.NET SQL Kayıt Aracı sürüm 4.0.30319.18408
SQL sunucusuna ASP.NET özelliklerini yüklemek veya bunları kaldırmak için kullan
ılan yönetim yardımcı programı.
Telif hakkı (C) Microsoft Corporation. Tüm hakları saklıdır.
Bu özellikleri ekleme işlemini başlat:
Membership
Profile
RoleManager
Personalization
SqlWebEventProvider
.............
Tamamlandı.
--------------------------------------------------------------------------------------------------------
Şeklinde veritabanını istediğimiz şekilde oluşturuyoruz.
Daha sonra web.config içine aşağıdaki satırları eklemelisiniz (system.web içine eklenmeli)
  <system.web>
<sessionState mode="SQLServer" sqlConnectionString="Data Source=Database_adı;Initial Catalog=veritabanı;User ID=kullanıcı;Password=şifre" cookieless="false" timeout="120" />
  </system.web>
eğer hosting firmanız oluşturduğunuz veritabanına db_owner yetkisini vermişse herhangi bir sorun yaşamadan siteniz hatasız açılacaktır fakat db_owner yetkisi sa kullanıcında ise ve hosting firmanız yetkiyi vermezse ozaman MSSQL server bazı fonksiyonlarını bizim elle eklememiz gerekli.Bu fonksiyonların başında TempGetVersiyon fonksiyonu bulunmakta.
Aşağıda vermiş olduğum bu stored procedure tüm ihtiyaç duyulan fonksiyonları kendisi eklemekte.
Bu stored procedure Microsoft SQL server Management studio ile çalıştırıp hata almamışsanız.Artık session verilerinizi veritabanı üzerinde tutuyorsunuz demektir.
Türkçe hiç bir yerde bu konuyla ilgili bilgi bulamadığım için ekliyorum.2 günlük hata ayıklamının sonucu yazılmıştır.Umarım işinize yarar.
/*********************************************************************
 InstallSqlState.SQL
            
                 
 Installs the tables, and stored procedures necessary for
   
 supporting ASP.NET session state on SQL Azure.
        
 Copyright Microsoft, Inc.
 All Rights Reserved.
 *********************************************************************/
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[happylifesessionTempSessions]') AND type in (N'U'))
DROP TABLE [dbo].[happylifesessionTempSessions]
GO 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[happylifesessionTempApplications]') AND type in (N'U'))
DROP TABLE [dbo].[happylifesessionTempApplications]
GO 
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'GetMajorVersion') AND (type = 'P')))
 DROP PROCEDURE [dbo].GetMajorVersion
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'CreateTempTables') AND (type = 'P')))
 DROP PROCEDURE [dbo].CreateTempTables
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetVersion') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempGetVersion
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'GetHashCode') AND (type = 'P')))
 DROP PROCEDURE [dbo].GetHashCode
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetAppID') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempGetAppID
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempGetStateItem
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem2') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempGetStateItem2
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItem3') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempGetStateItem3
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusive') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempGetStateItemExclusive
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusive2') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempGetStateItemExclusive2
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempGetStateItemExclusive3') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempGetStateItemExclusive3
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempReleaseStateItemExclusive') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempReleaseStateItemExclusive
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertUninitializedItem') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempInsertUninitializedItem
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertStateItemShort') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempInsertStateItemShort
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempInsertStateItemLong') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempInsertStateItemLong
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemShort') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempUpdateStateItemShort
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemShortNullLong') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempUpdateStateItemShortNullLong
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemLong') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempUpdateStateItemLong
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempUpdateStateItemLongNullShort') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempUpdateStateItemLongNullShort
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempRemoveStateItem') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempRemoveStateItem
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'TempResetTimeout') AND (type = 'P')))
 DROP PROCEDURE [dbo].TempResetTimeout
GO
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'DeleteExpiredSessions') AND (type = 'P')))
 DROP PROCEDURE [dbo].DeleteExpiredSessions
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.GetMajorVersion
 @@ver int OUTPUT
AS
BEGIN
 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
 END
END
GO 
/*****************************************************************************/
CREATE PROCEDURE dbo.CreateTempTables
AS
 CREATE TABLE [happylifesession].dbo.happylifesessionTempSessions (
  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 [happylifesession].dbo.happylifesessionTempSessions(Expires)
 CREATE TABLE [happylifesession].dbo.happylifesessionTempApplications (
  AppId
     int
    NOT NULL PRIMARY KEY,
  AppName
    char(280)
   NOT NULL,
 )
 CREATE NONCLUSTERED INDEX Index_AppName ON [happylifesession].dbo.happylifesessionTempApplications(AppName)
RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempGetVersion
 @ver
  char(10) OUTPUT
AS
 SELECT @ver = "2"
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.GetHashCode
 @input varchar(280),
 @hash int OUTPUT
AS
 /*
   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 0
GO
/*****************************************************************************/
DECLARE @cmd nchar(4000)
SET @cmd = N'
 CREATE PROCEDURE dbo.TempGetAppID
 @appName
 varchar(280),
 @appId
  int OUTPUT
 AS
 SET @appName = LOWER(@appName)
 SET @appId = NULL
 SELECT @appId = AppId
 FROM [happylifesession].dbo.happylifesessionTempApplications
 WHERE AppName = @appName
 IF @appId IS NULL BEGIN
  BEGIN TRAN
  
  SELECT @appId = AppId
  FROM [happylifesession].dbo.happylifesessionTempApplications WITH (TABLOCKX)
  WHERE AppName = @appName
  
  IF @appId IS NULL
  BEGIN
   EXEC GetHashCode @appName, @appId OUTPUT
   
   INSERT [happylifesession].dbo.happylifesessionTempApplications
   VALUES
   (@appId, @appName)
   
   IF @@ERROR = 2627
   BEGIN
    DECLARE @dupApp varchar(280)
   
    SELECT @dupApp = RTRIM(AppName)
    FROM [happylifesession].dbo.happylifesessionTempApplications
    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
/*****************************************************************************/
CREATE PROCEDURE dbo.TempGetStateItem
 @id
   nvarchar(88),
 @itemShort varbinary(7000) OUTPUT,
 @locked
  bit OUTPUT,
 @lockDate  datetime OUTPUT,
 @lockCookie int OUTPUT
AS
 DECLARE @length AS int
 DECLARE @now AS datetime
 SET @now = GETUTCDATE()
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 SET Expires = DATEADD(n, Timeout, @now),
  @locked = Locked,
  @lockDate = LockDateLocal,
  @lockCookie = LockCookie,
  @itemShort = CASE @locked
   WHEN 0 THEN SessionItemShort
   ELSE NULL
   END,
  @length = CASE @locked
   WHEN 0 THEN DATALENGTH(SessionItemLong)
   ELSE NULL
   END
 WHERE SessionId = @id
 IF @length IS NOT NULL BEGIN
  SELECT [SessionItemLong] FROM [happylifesession].dbo.happylifesessionTempSessions WHERE SessionId = @id
 END
 RETURN 0
 
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempGetStateItem2
 @id
   nvarchar(88),
 @itemShort varbinary(7000) OUTPUT,
 @locked
  bit OUTPUT,
 @lockAge
 int OUTPUT,
 @lockCookie int OUTPUT
AS
 DECLARE @length AS int
 DECLARE @now AS datetime
 SET @now = GETUTCDATE()
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 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,
  @length = CASE @locked
   WHEN 0 THEN DATALENGTH(SessionItemLong)
   ELSE NULL
   END
 WHERE SessionId = @id
 IF @length IS NOT NULL BEGIN
  SELECT [SessionItemLong] FROM [happylifesession].dbo.happylifesessionTempSessions WHERE SessionId = @id
 END
 RETURN 0
GO
   
/*****************************************************************************/
CREATE PROCEDURE dbo.TempGetStateItem3
 @id
   nvarchar(88),
 @itemShort varbinary(7000) OUTPUT,
 @locked
  bit OUTPUT,
 @lockAge
 int OUTPUT,
 @lockCookie int OUTPUT,
 @actionFlags int OUTPUT
AS
 DECLARE @length AS int
 DECLARE @now AS datetime
 SET @now = GETUTCDATE()
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 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,
  @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
  SELECT [SessionItemLong] FROM [happylifesession].dbo.happylifesessionTempSessions WHERE SessionId = @id
 END
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempGetStateItemExclusive
 @id
   nvarchar(88),
 @itemShort varbinary(7000) OUTPUT,
 @locked
  bit OUTPUT,
 @lockDate  datetime OUTPUT,
 @lockCookie int OUTPUT
AS
 DECLARE @length AS int
 DECLARE @now AS datetime
 DECLARE @nowLocal AS datetime
 SET @now = GETUTCDATE()
 SET @nowLocal = GETDATE()
 
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 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,
  @length = CASE Locked
   WHEN 0 THEN DATALENGTH(SessionItemLong)
   ELSE NULL
   END,
  @locked = Locked,
  Locked = 1
 WHERE SessionId = @id
 IF @length IS NOT NULL BEGIN
  SELECT [SessionItemLong] FROM [happylifesession].dbo.happylifesessionTempSessions WHERE SessionId = @id
 END
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempGetStateItemExclusive2
 @id
   nvarchar(88),
 @itemShort varbinary(7000) OUTPUT,
 @locked
  bit OUTPUT,
 @lockAge
 int OUTPUT,
 @lockCookie int OUTPUT
AS
 DECLARE @length AS int
 DECLARE @now AS datetime
 DECLARE @nowLocal AS datetime
 SET @now = GETUTCDATE()
 SET @nowLocal = GETDATE()
 
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 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,
  @length = CASE Locked
   WHEN 0 THEN DATALENGTH(SessionItemLong)
   ELSE NULL
   END,
  @locked = Locked,
  Locked = 1
 WHERE SessionId = @id
 IF @length IS NOT NULL BEGIN
  SELECT [SessionItemLong] FROM [happylifesession].dbo.happylifesessionTempSessions WHERE SessionId = @id
 END
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempGetStateItemExclusive3
 @id
   nvarchar(88),
 @itemShort varbinary(7000) OUTPUT,
 @locked
  bit OUTPUT,
 @lockAge
 int OUTPUT,
 @lockCookie int OUTPUT,
 @actionFlags int OUTPUT
AS
 DECLARE @length AS int
 DECLARE @now AS datetime
 DECLARE @nowLocal AS datetime
 SET @now = GETUTCDATE()
 SET @nowLocal = GETDATE()
 
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 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,
  @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
  SELECT SessionItemLong FROM [happylifesession].dbo.happylifesessionTempSessions WHERE SessionId = @id
 END
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempReleaseStateItemExclusive
 @id
   nvarchar(88),
 @lockCookie int
AS
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 SET Expires = DATEADD(n, Timeout, GETUTCDATE()),
  Locked = 0
 WHERE SessionId = @id AND LockCookie = @lockCookie
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempInsertUninitializedItem
 @id
   nvarchar(88),
 @itemShort varbinary(7000),
 @timeout
 int
AS
 
 DECLARE @now AS datetime
 DECLARE @nowLocal AS datetime
 
 SET @now = GETUTCDATE()
 SET @nowLocal = GETDATE()
 INSERT [happylifesession].dbo.happylifesessionTempSessions
  (SessionId,
   SessionItemShort,
   Timeout,
   Expires,
   Locked,
   LockDate,
   LockDateLocal,
   LockCookie,
   Flags)
 VALUES
  (@id,
   @itemShort,
   @timeout,
   DATEADD(n, @timeout, @now),
   0,
   @now,
   @nowLocal,
   1,
   1)
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempInsertStateItemShort
 @id
   nvarchar(88),
 @itemShort varbinary(7000),
 @timeout
 int
AS
 
 DECLARE @now AS datetime
 DECLARE @nowLocal AS datetime
 
 SET @now = GETUTCDATE()
 SET @nowLocal = GETDATE()
 INSERT [happylifesession].dbo.happylifesessionTempSessions
  (SessionId,
   SessionItemShort,
   Timeout,
   Expires,
   Locked,
   LockDate,
   LockDateLocal,
   LockCookie)
 VALUES
  (@id,
   @itemShort,
   @timeout,
   DATEADD(n, @timeout, @now),
   0,
   @now,
   @nowLocal,
   1)
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempInsertStateItemLong
 @id
   nvarchar(88),
 @itemLong  image,
 @timeout
 int
AS
 
 DECLARE @now AS datetime
 DECLARE @nowLocal AS datetime
 
 SET @now = GETUTCDATE()
 SET @nowLocal = GETDATE()
 INSERT [happylifesession].dbo.happylifesessionTempSessions
  (SessionId,
   SessionItemLong,
   Timeout,
   Expires,
   Locked,
   LockDate,
   LockDateLocal,
   LockCookie)
 VALUES
  (@id,
   @itemLong,
   @timeout,
   DATEADD(n, @timeout, @now),
   0,
   @now,
   @nowLocal,
   1)
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempUpdateStateItemShort
 @id
   nvarchar(88),
 @itemShort varbinary(7000),
 @timeout
 int,
 @lockCookie int
AS
 
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
  SessionItemShort = @itemShort,
  Timeout = @timeout,
  Locked = 0
 WHERE SessionId = @id AND LockCookie = @lockCookie
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempUpdateStateItemShortNullLong
 @id
   nvarchar(88),
 @itemShort varbinary(7000),
 @timeout
 int,
 @lockCookie int
AS
 
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
  SessionItemShort = @itemShort,
  SessionItemLong = NULL,
  Timeout = @timeout,
  Locked = 0
 WHERE SessionId = @id AND LockCookie = @lockCookie
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempUpdateStateItemLong
 @id
   nvarchar(88),
 @itemLong  image,
 @timeout
 int,
 @lockCookie int
AS
 
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
  SessionItemLong = @itemLong,
  Timeout = @timeout,
  Locked = 0
 WHERE SessionId = @id AND LockCookie = @lockCookie
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempUpdateStateItemLongNullShort
 @id
   nvarchar(88),
 @itemLong  image,
 @timeout
 int,
 @lockCookie int
AS
 
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 SET Expires = DATEADD(n, @timeout, GETUTCDATE()),
  SessionItemLong = @itemLong,
  SessionItemShort = NULL,
  Timeout = @timeout,
  Locked = 0
 WHERE SessionId = @id AND LockCookie = @lockCookie
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempRemoveStateItem
 @id
  nvarchar(88),
 @lockCookie int
AS
 DELETE [happylifesession].dbo.happylifesessionTempSessions
 WHERE SessionId = @id AND LockCookie = @lockCookie
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.TempResetTimeout
 @id
  nvarchar(88)
AS
 UPDATE [happylifesession].dbo.happylifesessionTempSessions
 SET Expires = DATEADD(n, Timeout, GETUTCDATE())
 WHERE SessionId = @id
 RETURN 0
GO
/*****************************************************************************/
CREATE PROCEDURE dbo.DeleteExpiredSessions
AS
 DECLARE @now datetime
 SET @now = GETUTCDATE()
 DELETE [happylifesession].dbo.happylifesessionTempSessions
 WHERE Expires < @now
 RETURN 0
GO
   
/*****************************************************************************/
EXECUTE dbo.CreateTempTables
GO
/*************************************************************/
/*************************************************************/
/*************************************************************/
/*************************************************************/
PRINT ''
PRINT '------------------------------------------'
PRINT 'Completed execution of InstallSqlState.SQL'
PRINT '------------------------------------------'
IF NOT EXISTS(SELECT NAME FROM sys.sysusers where name='happylifesession')
BEGIN
 CREATE USER [happylifesession] FOR LOGIN [happylifesession]
END
GO
EXEC sp_addrolemember N'db_datawriter', N'happylifesession'
GO
EXEC sp_addrolemember N'db_datareader', N'happylifesession'
GO
EXEC sp_addrolemember N'db_owner', N'happylifesession'
GO