1*eeb7e5b3SAdam Hornáček/*====================================================================================== 2*eeb7e5b3SAdam HornáčekMicrosoft SQL Server Sample Code 3*eeb7e5b3SAdam Hornáček 4*eeb7e5b3SAdam HornáčekCopyright (c) Microsoft Corporation 5*eeb7e5b3SAdam Hornáček 6*eeb7e5b3SAdam HornáčekAll rights reserved. 7*eeb7e5b3SAdam Hornáček 8*eeb7e5b3SAdam HornáčekMIT License. 9*eeb7e5b3SAdam Hornáček 10*eeb7e5b3SAdam HornáčekPermission is hereby granted, free of charge, to any person obtaining a copy 11*eeb7e5b3SAdam Hornáčekof this software and associated documentation files (the "Software"), to 12*eeb7e5b3SAdam Hornáčekdeal in the Software without restriction, including without limitation the 13*eeb7e5b3SAdam Hornáčekrights to use, copy, modify, merge, publish, distribute, sublicense, and/or 14*eeb7e5b3SAdam Hornáčeksell copies of the Software, and to permit persons to whom the Software is 15*eeb7e5b3SAdam Hornáčekfurnished to do so, subject to the following conditions: 16*eeb7e5b3SAdam Hornáček 17*eeb7e5b3SAdam HornáčekThe above copyright notice and this permission notice shall be included in 18*eeb7e5b3SAdam Hornáčekall copies or substantial portions of the Software. 19*eeb7e5b3SAdam Hornáček 20*eeb7e5b3SAdam HornáčekTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21*eeb7e5b3SAdam HornáčekIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22*eeb7e5b3SAdam HornáčekFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23*eeb7e5b3SAdam HornáčekAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24*eeb7e5b3SAdam HornáčekLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25*eeb7e5b3SAdam HornáčekFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 26*eeb7e5b3SAdam HornáčekIN THE SOFTWARE. 27*eeb7e5b3SAdam Hornáček 28*eeb7e5b3SAdam HornáčekScript: aspstate_sql2016_with_retry.sql 29*eeb7e5b3SAdam Hornáček 30*eeb7e5b3SAdam HornáčekDescription: 31*eeb7e5b3SAdam HornáčekThis script is based on the InstallSqlState.sql script but works with SQL 2016 In-Memory OLTP by replacing the following objects 32*eeb7e5b3SAdam Hornáčekto in-memory and natively compiled stored procedures. 33*eeb7e5b3SAdam Hornáček 34*eeb7e5b3SAdam Hornáček** Tables: 35*eeb7e5b3SAdam Hornáček Converted the following table to In-Memory table: 36*eeb7e5b3SAdam Hornáček - [dbo].[ASPStateTempSessions] (SessionId: NONCLUSTERED HASH PK (Bucket Count=33554432)) 37*eeb7e5b3SAdam Hornáček 38*eeb7e5b3SAdam Hornáček** Stored Procedures: 39*eeb7e5b3SAdam Hornáček Converted the following SPs to Native Compiled SPs: 40*eeb7e5b3SAdam Hornáček - dbo.TempGetStateItemExclusive3 41*eeb7e5b3SAdam Hornáček - dbo.TempInsertStateItemShort 42*eeb7e5b3SAdam Hornáček - dbo.TempUpdateStateItemLong 43*eeb7e5b3SAdam Hornáček - dbo.TempUpdateStateItemLongNullShort 44*eeb7e5b3SAdam Hornáček - dbo.TempUpdateStateItemShort 45*eeb7e5b3SAdam Hornáček======================================================================================*/ 46*eeb7e5b3SAdam Hornáček 47*eeb7e5b3SAdam HornáčekUSE [master] 48*eeb7e5b3SAdam HornáčekGO 49*eeb7e5b3SAdam Hornáček 50*eeb7e5b3SAdam HornáčekDECLARE @SQLDataFolder nvarchar(max) = cast(SERVERPROPERTY('InstanceDefaultDataPath') as nvarchar(max)) 51*eeb7e5b3SAdam HornáčekDECLARE @SQL nvarchar(max) = N''; 52*eeb7e5b3SAdam Hornáček 53*eeb7e5b3SAdam HornáčekSET @SQL = N' 54*eeb7e5b3SAdam HornáčekCREATE DATABASE [ASPState] 55*eeb7e5b3SAdam Hornáček CONTAINMENT = NONE 56*eeb7e5b3SAdam Hornáček ON PRIMARY 57*eeb7e5b3SAdam Hornáček (NAME = N''ASPState'', FILENAME = N''' + @SQLDataFolder + 'ASPState.mdf'' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB ), 58*eeb7e5b3SAdam Hornáček FILEGROUP [ASPState_mod] CONTAINS MEMORY_OPTIMIZED_DATA DEFAULT 59*eeb7e5b3SAdam Hornáček (NAME = N''ASPState_mod'', FILENAME = N''' + @SQLDataFolder + 'ASPState_mod'' , MAXSIZE = UNLIMITED) 60*eeb7e5b3SAdam Hornáček LOG ON 61*eeb7e5b3SAdam Hornáček (NAME = N''ASPState_log'', FILENAME = N''' + @SQLDataFolder + 'ASPState_log.ldf'' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB ); 62*eeb7e5b3SAdam Hornáček 63*eeb7e5b3SAdam HornáčekALTER DATABASE [ASPState] SET COMPATIBILITY_LEVEL = 130; ALTER DATABASE [ASPState] SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON;' 64*eeb7e5b3SAdam Hornáček 65*eeb7e5b3SAdam HornáčekEXECUTE (@SQL) 66*eeb7e5b3SAdam HornáčekGO 67*eeb7e5b3SAdam Hornáček 68*eeb7e5b3SAdam HornáčekUSE [AspState] 69*eeb7e5b3SAdam HornáčekGO 70*eeb7e5b3SAdam Hornáček 71*eeb7e5b3SAdam HornáčekCREATE ROLE [ASPStateExecute]; 72*eeb7e5b3SAdam HornáčekCREATE ROLE [ASPStateResetRole]; 73*eeb7e5b3SAdam HornáčekCREATE ROLE [ASPStateRole]; 74*eeb7e5b3SAdam Hornáček 75*eeb7e5b3SAdam HornáčekCREATE TYPE [dbo].[tAppName] FROM [varchar](280) NOT NULL; 76*eeb7e5b3SAdam HornáčekCREATE TYPE [dbo].[tSessionId] FROM [nvarchar](88) NOT NULL; 77*eeb7e5b3SAdam HornáčekCREATE TYPE [dbo].[tSessionItemLong] FROM [image] NULL; 78*eeb7e5b3SAdam HornáčekCREATE TYPE [dbo].[tSessionItemShort] FROM [varbinary](7000) NULL; 79*eeb7e5b3SAdam HornáčekCREATE TYPE [dbo].[tTextPtr] FROM [varbinary](max) NULL; 80*eeb7e5b3SAdam Hornáček 81*eeb7e5b3SAdam Hornáček 82*eeb7e5b3SAdam HornáčekCREATE TABLE [dbo].[ASPStateTempSessions] 83*eeb7e5b3SAdam Hornáček( 84*eeb7e5b3SAdam Hornáček [SessionId] [nvarchar](88) COLLATE Latin1_General_100_BIN2 NOT NULL, 85*eeb7e5b3SAdam Hornáček [Created] [datetime] NOT NULL DEFAULT (getutcdate()), 86*eeb7e5b3SAdam Hornáček [Expires] [datetime] NOT NULL, 87*eeb7e5b3SAdam Hornáček [LockDate] [datetime] NOT NULL, 88*eeb7e5b3SAdam Hornáček [LockDateLocal] [datetime] NOT NULL, 89*eeb7e5b3SAdam Hornáček [LockCookie] [int] NOT NULL, 90*eeb7e5b3SAdam Hornáček [Timeout] [int] NOT NULL, 91*eeb7e5b3SAdam Hornáček [Locked] [bit] NOT NULL, 92*eeb7e5b3SAdam Hornáček [SessionItemShort] [varbinary](7000) NULL, 93*eeb7e5b3SAdam Hornáček [SessionItemLong] [varbinary](max) NULL, 94*eeb7e5b3SAdam Hornáček [Flags] [int] NOT NULL DEFAULT ((0)), 95*eeb7e5b3SAdam Hornáček 96*eeb7e5b3SAdam HornáčekINDEX [Index_Expires] NONCLUSTERED 97*eeb7e5b3SAdam Hornáček( 98*eeb7e5b3SAdam Hornáček [Expires] ASC 99*eeb7e5b3SAdam Hornáček), 100*eeb7e5b3SAdam HornáčekPRIMARY KEY NONCLUSTERED HASH 101*eeb7e5b3SAdam Hornáček( 102*eeb7e5b3SAdam Hornáček [SessionId] 103*eeb7e5b3SAdam Hornáček)WITH ( BUCKET_COUNT = 33554432) 104*eeb7e5b3SAdam Hornáček)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY ) 105*eeb7e5b3SAdam HornáčekGO 106*eeb7e5b3SAdam Hornáček 107*eeb7e5b3SAdam HornáčekCREATE TABLE [dbo].[ASPStateTempApplications]( 108*eeb7e5b3SAdam Hornáček [AppId] [int] NOT NULL, 109*eeb7e5b3SAdam Hornáček [AppName] [char](280) NOT NULL, 110*eeb7e5b3SAdam HornáčekPRIMARY KEY CLUSTERED 111*eeb7e5b3SAdam Hornáček( 112*eeb7e5b3SAdam Hornáček [AppId] ASC 113*eeb7e5b3SAdam Hornáček)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 114*eeb7e5b3SAdam Hornáček) ON [PRIMARY] 115*eeb7e5b3SAdam Hornáček 116*eeb7e5b3SAdam HornáčekGO 117*eeb7e5b3SAdam Hornáček 118*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItemExclusive3_HK] 119*eeb7e5b3SAdam Hornáček @id nvarchar(88), 120*eeb7e5b3SAdam Hornáček @itemShort varbinary(7000) OUTPUT, 121*eeb7e5b3SAdam Hornáček @locked bit OUTPUT, 122*eeb7e5b3SAdam Hornáček @lockAge int OUTPUT, 123*eeb7e5b3SAdam Hornáček @lockCookie int OUTPUT, 124*eeb7e5b3SAdam Hornáček @actionFlags int OUTPUT 125*eeb7e5b3SAdam HornáčekWITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER 126*eeb7e5b3SAdam HornáčekAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english') 127*eeb7e5b3SAdam Hornáček 128*eeb7e5b3SAdam Hornáček DECLARE @textptr AS varbinary(max) 129*eeb7e5b3SAdam Hornáček DECLARE @length AS int 130*eeb7e5b3SAdam Hornáček DECLARE @now AS datetime 131*eeb7e5b3SAdam Hornáček DECLARE @nowLocal AS datetime 132*eeb7e5b3SAdam Hornáček 133*eeb7e5b3SAdam Hornáček SET @now = GETUTCDATE() 134*eeb7e5b3SAdam Hornáček SET @nowLocal = GETDATE() 135*eeb7e5b3SAdam Hornáček 136*eeb7e5b3SAdam Hornáček DECLARE @LockedCheck bit 137*eeb7e5b3SAdam Hornáček DECLARE @Flags int 138*eeb7e5b3SAdam Hornáček 139*eeb7e5b3SAdam Hornáček SELECT @LockedCheck=Locked, @Flags=Flags FROM dbo.ASPStateTempSessions WHERE SessionID=@id 140*eeb7e5b3SAdam Hornáček 141*eeb7e5b3SAdam Hornáček IF @Flags&1 <> 0 142*eeb7e5b3SAdam Hornáček BEGIN 143*eeb7e5b3SAdam Hornáček SET @actionFlags=1 144*eeb7e5b3SAdam Hornáček UPDATE dbo.ASPStateTempSessions SET Flags=Flags& ~1 WHERE SessionID=@id 145*eeb7e5b3SAdam Hornáček END 146*eeb7e5b3SAdam Hornáček ELSE 147*eeb7e5b3SAdam Hornáček SET @actionFlags=0 148*eeb7e5b3SAdam Hornáček 149*eeb7e5b3SAdam Hornáček IF @LockedCheck=1 150*eeb7e5b3SAdam Hornáček BEGIN 151*eeb7e5b3SAdam Hornáček UPDATE dbo.ASPStateTempSessions 152*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, Timeout, @now), 153*eeb7e5b3SAdam Hornáček @lockAge = DATEDIFF(second, LockDate, @now), 154*eeb7e5b3SAdam Hornáček @lockCookie = LockCookie, 155*eeb7e5b3SAdam Hornáček @itemShort = NULL, 156*eeb7e5b3SAdam Hornáček --@textptr = NULL, 157*eeb7e5b3SAdam Hornáček @length = NULL, 158*eeb7e5b3SAdam Hornáček @locked = 1 159*eeb7e5b3SAdam Hornáček WHERE SessionId = @id 160*eeb7e5b3SAdam Hornáček END 161*eeb7e5b3SAdam Hornáček ELSE 162*eeb7e5b3SAdam Hornáček BEGIN 163*eeb7e5b3SAdam Hornáček UPDATE dbo.ASPStateTempSessions 164*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, Timeout, @now), 165*eeb7e5b3SAdam Hornáček LockDate = @now, 166*eeb7e5b3SAdam Hornáček LockDateLocal = @nowlocal, 167*eeb7e5b3SAdam Hornáček @lockAge = 0, 168*eeb7e5b3SAdam Hornáček @lockCookie = LockCookie = LockCookie + 1, 169*eeb7e5b3SAdam Hornáček @itemShort = SessionItemShort, 170*eeb7e5b3SAdam Hornáček @textptr = SessionItemLong, 171*eeb7e5b3SAdam Hornáček @length = 1, 172*eeb7e5b3SAdam Hornáček @locked = 0, 173*eeb7e5b3SAdam Hornáček Locked = 1 174*eeb7e5b3SAdam Hornáček WHERE SessionId = @id 175*eeb7e5b3SAdam Hornáček 176*eeb7e5b3SAdam Hornáček IF @TextPtr IS NOT NULL 177*eeb7e5b3SAdam Hornáček SELECT @TextPtr 178*eeb7e5b3SAdam Hornáček 179*eeb7e5b3SAdam Hornáček END 180*eeb7e5b3SAdam HornáčekEND 181*eeb7e5b3SAdam HornáčekGO 182*eeb7e5b3SAdam Hornáček 183*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItemExclusive3] 184*eeb7e5b3SAdam Hornáček @id nvarchar(88), 185*eeb7e5b3SAdam Hornáček @itemShort varbinary(7000) OUTPUT, 186*eeb7e5b3SAdam Hornáček @locked bit OUTPUT, 187*eeb7e5b3SAdam Hornáček @lockAge int OUTPUT, 188*eeb7e5b3SAdam Hornáček @lockCookie int OUTPUT, 189*eeb7e5b3SAdam Hornáček @actionFlags int OUTPUT 190*eeb7e5b3SAdam HornáčekAS 191*eeb7e5b3SAdam HornáčekBEGIN 192*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 193*eeb7e5b3SAdam Hornáček 194*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 195*eeb7e5b3SAdam Hornáček BEGIN 196*eeb7e5b3SAdam Hornáček BEGIN TRY 197*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 198*eeb7e5b3SAdam Hornáček EXEC dbo.TempGetStateItemExclusive3_HK 199*eeb7e5b3SAdam Hornáček @id, 200*eeb7e5b3SAdam Hornáček @itemShort = @itemShort OUTPUT, 201*eeb7e5b3SAdam Hornáček @locked = @locked OUTPUT, 202*eeb7e5b3SAdam Hornáček @lockAge = @lockAge OUTPUT, 203*eeb7e5b3SAdam Hornáček @lockCookie = @lockCookie OUTPUT, 204*eeb7e5b3SAdam Hornáček @actionFlags = @actionFlags OUTPUT 205*eeb7e5b3SAdam Hornáček 206*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 207*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 208*eeb7e5b3SAdam Hornáček END TRY 209*eeb7e5b3SAdam Hornáček 210*eeb7e5b3SAdam Hornáček BEGIN CATCH 211*eeb7e5b3SAdam Hornáček SET @retry -= 1; 212*eeb7e5b3SAdam Hornáček 213*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 214*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 215*eeb7e5b3SAdam Hornáček ) 216*eeb7e5b3SAdam Hornáček BEGIN 217*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 218*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 219*eeb7e5b3SAdam Hornáček 220*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 221*eeb7e5b3SAdam Hornáček END 222*eeb7e5b3SAdam Hornáček ELSE 223*eeb7e5b3SAdam Hornáček BEGIN 224*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 225*eeb7e5b3SAdam Hornáček THROW; 226*eeb7e5b3SAdam Hornáček END 227*eeb7e5b3SAdam Hornáček END CATCH 228*eeb7e5b3SAdam Hornáček 229*eeb7e5b3SAdam Hornáček END -- //While loop 230*eeb7e5b3SAdam HornáčekEND; 231*eeb7e5b3SAdam HornáčekGO 232*eeb7e5b3SAdam Hornáček 233*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempInsertStateItemShort_HK] 234*eeb7e5b3SAdam Hornáček @id nvarchar(88), 235*eeb7e5b3SAdam Hornáček @itemShort varbinary(7000), 236*eeb7e5b3SAdam Hornáček @timeout int 237*eeb7e5b3SAdam HornáčekWITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER 238*eeb7e5b3SAdam HornáčekAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english') 239*eeb7e5b3SAdam Hornáček 240*eeb7e5b3SAdam Hornáček DECLARE @now AS datetime 241*eeb7e5b3SAdam Hornáček DECLARE @nowLocal AS datetime 242*eeb7e5b3SAdam Hornáček 243*eeb7e5b3SAdam Hornáček SET @now = GETUTCDATE() 244*eeb7e5b3SAdam Hornáček SET @nowLocal = GETDATE() 245*eeb7e5b3SAdam Hornáček 246*eeb7e5b3SAdam Hornáček INSERT dbo.ASPStateTempSessions 247*eeb7e5b3SAdam Hornáček (SessionId, 248*eeb7e5b3SAdam Hornáček SessionItemShort, 249*eeb7e5b3SAdam Hornáček Timeout, 250*eeb7e5b3SAdam Hornáček Expires, 251*eeb7e5b3SAdam Hornáček Locked, 252*eeb7e5b3SAdam Hornáček LockDate, 253*eeb7e5b3SAdam Hornáček LockDateLocal, 254*eeb7e5b3SAdam Hornáček LockCookie, 255*eeb7e5b3SAdam Hornáček Created, 256*eeb7e5b3SAdam Hornáček Flags, 257*eeb7e5b3SAdam Hornáček SessionItemLong) 258*eeb7e5b3SAdam Hornáček VALUES 259*eeb7e5b3SAdam Hornáček (@id, 260*eeb7e5b3SAdam Hornáček @itemShort, 261*eeb7e5b3SAdam Hornáček @timeout, 262*eeb7e5b3SAdam Hornáček DATEADD(n, @timeout, @now), 263*eeb7e5b3SAdam Hornáček 0, 264*eeb7e5b3SAdam Hornáček @now, 265*eeb7e5b3SAdam Hornáček @nowLocal, 266*eeb7e5b3SAdam Hornáček 1, 267*eeb7e5b3SAdam Hornáček @now, 268*eeb7e5b3SAdam Hornáček 0, 269*eeb7e5b3SAdam Hornáček NULL) 270*eeb7e5b3SAdam Hornáček 271*eeb7e5b3SAdam Hornáček RETURN 0 272*eeb7e5b3SAdam HornáčekEND 273*eeb7e5b3SAdam HornáčekGO 274*eeb7e5b3SAdam Hornáček 275*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempInsertStateItemShort] 276*eeb7e5b3SAdam Hornáček @id nvarchar(88), 277*eeb7e5b3SAdam Hornáček @itemShort varbinary(7000), 278*eeb7e5b3SAdam Hornáček @timeout int 279*eeb7e5b3SAdam HornáčekAS 280*eeb7e5b3SAdam HornáčekBEGIN 281*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 282*eeb7e5b3SAdam Hornáček 283*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 284*eeb7e5b3SAdam Hornáček BEGIN 285*eeb7e5b3SAdam Hornáček BEGIN TRY 286*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 287*eeb7e5b3SAdam Hornáček EXEC dbo.TempInsertStateItemShort_HK @id, @itemShort, @timeout 288*eeb7e5b3SAdam Hornáček 289*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 290*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 291*eeb7e5b3SAdam Hornáček END TRY 292*eeb7e5b3SAdam Hornáček 293*eeb7e5b3SAdam Hornáček BEGIN CATCH 294*eeb7e5b3SAdam Hornáček SET @retry -= 1; 295*eeb7e5b3SAdam Hornáček 296*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 297*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 298*eeb7e5b3SAdam Hornáček ) 299*eeb7e5b3SAdam Hornáček BEGIN 300*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 301*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 302*eeb7e5b3SAdam Hornáček 303*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 304*eeb7e5b3SAdam Hornáček END 305*eeb7e5b3SAdam Hornáček ELSE 306*eeb7e5b3SAdam Hornáček BEGIN 307*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 308*eeb7e5b3SAdam Hornáček THROW; 309*eeb7e5b3SAdam Hornáček END 310*eeb7e5b3SAdam Hornáček END CATCH 311*eeb7e5b3SAdam Hornáček 312*eeb7e5b3SAdam Hornáček END -- //While loop 313*eeb7e5b3SAdam HornáčekEND; 314*eeb7e5b3SAdam HornáčekGO 315*eeb7e5b3SAdam Hornáček 316*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemLong_HK] 317*eeb7e5b3SAdam Hornáček @id nvarchar(88), 318*eeb7e5b3SAdam Hornáček @itemLong varbinary(max), 319*eeb7e5b3SAdam Hornáček @timeout int, 320*eeb7e5b3SAdam Hornáček @lockCookie int 321*eeb7e5b3SAdam HornáčekWITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER 322*eeb7e5b3SAdam HornáčekAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english') 323*eeb7e5b3SAdam Hornáček 324*eeb7e5b3SAdam Hornáček UPDATE dbo.ASPStateTempSessions 325*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, @timeout, GETUTCDATE()), 326*eeb7e5b3SAdam Hornáček SessionItemLong = @itemLong, 327*eeb7e5b3SAdam Hornáček Timeout = @timeout, 328*eeb7e5b3SAdam Hornáček Locked = 0 329*eeb7e5b3SAdam Hornáček WHERE SessionId = @id AND LockCookie = @lockCookie 330*eeb7e5b3SAdam Hornáček 331*eeb7e5b3SAdam Hornáček RETURN 0 332*eeb7e5b3SAdam HornáčekEND 333*eeb7e5b3SAdam HornáčekGO 334*eeb7e5b3SAdam Hornáček 335*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemLong] 336*eeb7e5b3SAdam Hornáček @id nvarchar(88), 337*eeb7e5b3SAdam Hornáček @itemLong varbinary(max), 338*eeb7e5b3SAdam Hornáček @timeout int, 339*eeb7e5b3SAdam Hornáček @lockCookie int 340*eeb7e5b3SAdam HornáčekAS 341*eeb7e5b3SAdam HornáčekBEGIN 342*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 343*eeb7e5b3SAdam Hornáček 344*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 345*eeb7e5b3SAdam Hornáček BEGIN 346*eeb7e5b3SAdam Hornáček BEGIN TRY 347*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 348*eeb7e5b3SAdam Hornáček EXEC dbo.TempUpdateStateItemLong_HK @id, @itemLong, @timeout, @lockCookie 349*eeb7e5b3SAdam Hornáček 350*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 351*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 352*eeb7e5b3SAdam Hornáček END TRY 353*eeb7e5b3SAdam Hornáček 354*eeb7e5b3SAdam Hornáček BEGIN CATCH 355*eeb7e5b3SAdam Hornáček SET @retry -= 1; 356*eeb7e5b3SAdam Hornáček 357*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 358*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 359*eeb7e5b3SAdam Hornáček ) 360*eeb7e5b3SAdam Hornáček BEGIN 361*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 362*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 363*eeb7e5b3SAdam Hornáček 364*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 365*eeb7e5b3SAdam Hornáček END 366*eeb7e5b3SAdam Hornáček ELSE 367*eeb7e5b3SAdam Hornáček BEGIN 368*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 369*eeb7e5b3SAdam Hornáček THROW; 370*eeb7e5b3SAdam Hornáček END 371*eeb7e5b3SAdam Hornáček END CATCH 372*eeb7e5b3SAdam Hornáček 373*eeb7e5b3SAdam Hornáček END -- //While loop 374*eeb7e5b3SAdam HornáčekEND; 375*eeb7e5b3SAdam HornáčekGO 376*eeb7e5b3SAdam Hornáček 377*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemLongNullShort_HK] 378*eeb7e5b3SAdam Hornáček @id nvarchar(88), 379*eeb7e5b3SAdam Hornáček @itemLong varbinary(max), 380*eeb7e5b3SAdam Hornáček @timeout int, 381*eeb7e5b3SAdam Hornáček @lockCookie int 382*eeb7e5b3SAdam HornáčekWITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER 383*eeb7e5b3SAdam HornáčekAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english') 384*eeb7e5b3SAdam Hornáček 385*eeb7e5b3SAdam Hornáček UPDATE dbo.ASPStateTempSessions 386*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, @timeout, GETUTCDATE()), 387*eeb7e5b3SAdam Hornáček SessionItemLong = @itemLong, 388*eeb7e5b3SAdam Hornáček SessionItemShort = NULL, 389*eeb7e5b3SAdam Hornáček Timeout = @timeout, 390*eeb7e5b3SAdam Hornáček Locked = 0 391*eeb7e5b3SAdam Hornáček WHERE SessionId = @id AND LockCookie = @lockCookie 392*eeb7e5b3SAdam Hornáček 393*eeb7e5b3SAdam Hornáček RETURN 0 394*eeb7e5b3SAdam HornáčekEND 395*eeb7e5b3SAdam HornáčekGO 396*eeb7e5b3SAdam Hornáček 397*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemLongNullShort] 398*eeb7e5b3SAdam Hornáček @id nvarchar(88), 399*eeb7e5b3SAdam Hornáček @itemLong varbinary(max), 400*eeb7e5b3SAdam Hornáček @timeout int, 401*eeb7e5b3SAdam Hornáček @lockCookie int 402*eeb7e5b3SAdam HornáčekAS 403*eeb7e5b3SAdam HornáčekBEGIN 404*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 405*eeb7e5b3SAdam Hornáček 406*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 407*eeb7e5b3SAdam Hornáček BEGIN 408*eeb7e5b3SAdam Hornáček BEGIN TRY 409*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 410*eeb7e5b3SAdam Hornáček EXEC dbo.TempUpdateStateItemLongNullShort_HK @id, @itemLong, @timeout, @lockCookie 411*eeb7e5b3SAdam Hornáček 412*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 413*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 414*eeb7e5b3SAdam Hornáček END TRY 415*eeb7e5b3SAdam Hornáček 416*eeb7e5b3SAdam Hornáček BEGIN CATCH 417*eeb7e5b3SAdam Hornáček SET @retry -= 1; 418*eeb7e5b3SAdam Hornáček 419*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 420*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 421*eeb7e5b3SAdam Hornáček ) 422*eeb7e5b3SAdam Hornáček BEGIN 423*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 424*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 425*eeb7e5b3SAdam Hornáček 426*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 427*eeb7e5b3SAdam Hornáček END 428*eeb7e5b3SAdam Hornáček ELSE 429*eeb7e5b3SAdam Hornáček BEGIN 430*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 431*eeb7e5b3SAdam Hornáček THROW; 432*eeb7e5b3SAdam Hornáček END 433*eeb7e5b3SAdam Hornáček END CATCH 434*eeb7e5b3SAdam Hornáček 435*eeb7e5b3SAdam Hornáček END -- //While loop 436*eeb7e5b3SAdam HornáčekEND; 437*eeb7e5b3SAdam HornáčekGO 438*eeb7e5b3SAdam Hornáček 439*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemShort_HK] 440*eeb7e5b3SAdam Hornáček @id nvarchar(88), 441*eeb7e5b3SAdam Hornáček @itemShort varbinary(7000), 442*eeb7e5b3SAdam Hornáček @timeout int, 443*eeb7e5b3SAdam Hornáček @lockCookie int 444*eeb7e5b3SAdam HornáčekWITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER 445*eeb7e5b3SAdam HornáčekAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english' ) 446*eeb7e5b3SAdam Hornáček 447*eeb7e5b3SAdam Hornáček UPDATE dbo.ASPStateTempSessions 448*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, @timeout, GETUTCDATE()), 449*eeb7e5b3SAdam Hornáček SessionItemShort = @itemShort, 450*eeb7e5b3SAdam Hornáček Timeout = @timeout, 451*eeb7e5b3SAdam Hornáček Locked = 0 452*eeb7e5b3SAdam Hornáček WHERE SessionId = @id AND LockCookie = @lockCookie 453*eeb7e5b3SAdam Hornáček 454*eeb7e5b3SAdam Hornáček RETURN 0 455*eeb7e5b3SAdam HornáčekEND 456*eeb7e5b3SAdam HornáčekGO 457*eeb7e5b3SAdam Hornáček 458*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemShort] 459*eeb7e5b3SAdam Hornáček @id nvarchar(88), 460*eeb7e5b3SAdam Hornáček @itemShort varbinary(max), 461*eeb7e5b3SAdam Hornáček @timeout int, 462*eeb7e5b3SAdam Hornáček @lockCookie int 463*eeb7e5b3SAdam HornáčekAS 464*eeb7e5b3SAdam HornáčekBEGIN 465*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 466*eeb7e5b3SAdam Hornáček 467*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 468*eeb7e5b3SAdam Hornáček BEGIN 469*eeb7e5b3SAdam Hornáček BEGIN TRY 470*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 471*eeb7e5b3SAdam Hornáček EXEC dbo.TempUpdateStateItemShort_HK @id, @itemShort, @timeout, @lockCookie 472*eeb7e5b3SAdam Hornáček 473*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 474*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 475*eeb7e5b3SAdam Hornáček END TRY 476*eeb7e5b3SAdam Hornáček 477*eeb7e5b3SAdam Hornáček BEGIN CATCH 478*eeb7e5b3SAdam Hornáček SET @retry -= 1; 479*eeb7e5b3SAdam Hornáček 480*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 481*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 482*eeb7e5b3SAdam Hornáček ) 483*eeb7e5b3SAdam Hornáček BEGIN 484*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 485*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 486*eeb7e5b3SAdam Hornáček 487*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 488*eeb7e5b3SAdam Hornáček END 489*eeb7e5b3SAdam Hornáček ELSE 490*eeb7e5b3SAdam Hornáček BEGIN 491*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 492*eeb7e5b3SAdam Hornáček THROW; 493*eeb7e5b3SAdam Hornáček END 494*eeb7e5b3SAdam Hornáček END CATCH 495*eeb7e5b3SAdam Hornáček 496*eeb7e5b3SAdam Hornáček END -- //While loop 497*eeb7e5b3SAdam HornáčekEND; 498*eeb7e5b3SAdam HornáčekGO 499*eeb7e5b3SAdam Hornáček 500*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[CreateTempTables] 501*eeb7e5b3SAdam HornáčekAS 502*eeb7e5b3SAdam Hornáček CREATE TABLE ASPStateTempSessions ( 503*eeb7e5b3SAdam Hornáček SessionId nvarchar(88) COLLATE Latin1_General_100_BIN2 NOT NULL, 504*eeb7e5b3SAdam Hornáček Created datetime NOT NULL DEFAULT GETUTCDATE(), 505*eeb7e5b3SAdam Hornáček Expires datetime NOT NULL, 506*eeb7e5b3SAdam Hornáček LockDate datetime NOT NULL, 507*eeb7e5b3SAdam Hornáček LockDateLocal datetime NOT NULL, 508*eeb7e5b3SAdam Hornáček LockCookie int NOT NULL, 509*eeb7e5b3SAdam Hornáček Timeout int NOT NULL, 510*eeb7e5b3SAdam Hornáček Locked bit NOT NULL, 511*eeb7e5b3SAdam Hornáček SessionItemShort VARBINARY(7000) NULL, 512*eeb7e5b3SAdam Hornáček SessionItemLong VARBINARY(max) NULL, 513*eeb7e5b3SAdam Hornáček Flags int NOT NULL DEFAULT 0, 514*eeb7e5b3SAdam Hornáček 515*eeb7e5b3SAdam Hornáček PRIMARY KEY NONCLUSTERED HASH 516*eeb7e5b3SAdam Hornáček ( 517*eeb7e5b3SAdam Hornáček [SessionId] 518*eeb7e5b3SAdam Hornáček )WITH ( BUCKET_COUNT = 33554432), 519*eeb7e5b3SAdam Hornáček INDEX Index_Expires (Expires) 520*eeb7e5b3SAdam Hornáček 521*eeb7e5b3SAdam Hornáček )WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY ) 522*eeb7e5b3SAdam Hornáček 523*eeb7e5b3SAdam Hornáček CREATE TABLE dbo.ASPStateTempApplications ( 524*eeb7e5b3SAdam Hornáček AppId int NOT NULL PRIMARY KEY, 525*eeb7e5b3SAdam Hornáček AppName char(280) NOT NULL, 526*eeb7e5b3SAdam Hornáček ) 527*eeb7e5b3SAdam Hornáček CREATE NONCLUSTERED INDEX Index_AppName ON ASPStateTempApplications(AppName) 528*eeb7e5b3SAdam Hornáček 529*eeb7e5b3SAdam HornáčekRETURN 0 530*eeb7e5b3SAdam HornáčekGO 531*eeb7e5b3SAdam Hornáček 532*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[DeleteExpiredSessions] 533*eeb7e5b3SAdam HornáčekAS 534*eeb7e5b3SAdam Hornáček SET NOCOUNT ON 535*eeb7e5b3SAdam Hornáček SET DEADLOCK_PRIORITY LOW 536*eeb7e5b3SAdam Hornáček 537*eeb7e5b3SAdam Hornáček DECLARE @now datetime 538*eeb7e5b3SAdam Hornáček SET @now = GETUTCDATE() 539*eeb7e5b3SAdam Hornáček 540*eeb7e5b3SAdam Hornáček CREATE TABLE #tblExpiredSessions 541*eeb7e5b3SAdam Hornáček ( 542*eeb7e5b3SAdam Hornáček SessionId nvarchar(88) NOT NULL PRIMARY KEY 543*eeb7e5b3SAdam Hornáček ) 544*eeb7e5b3SAdam Hornáček 545*eeb7e5b3SAdam Hornáček INSERT #tblExpiredSessions (SessionId) 546*eeb7e5b3SAdam Hornáček SELECT SessionId 547*eeb7e5b3SAdam Hornáček FROM ASPStateTempSessions WITH (SNAPSHOT) 548*eeb7e5b3SAdam Hornáček WHERE Expires < @now 549*eeb7e5b3SAdam Hornáček 550*eeb7e5b3SAdam Hornáček IF @@ROWCOUNT <> 0 551*eeb7e5b3SAdam Hornáček BEGIN 552*eeb7e5b3SAdam Hornáček DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY 553*eeb7e5b3SAdam Hornáček FOR SELECT SessionId FROM #tblExpiredSessions 554*eeb7e5b3SAdam Hornáček 555*eeb7e5b3SAdam Hornáček DECLARE @SessionId nvarchar(88) 556*eeb7e5b3SAdam Hornáček 557*eeb7e5b3SAdam Hornáček OPEN ExpiredSessionCursor 558*eeb7e5b3SAdam Hornáček 559*eeb7e5b3SAdam Hornáček FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId 560*eeb7e5b3SAdam Hornáček 561*eeb7e5b3SAdam Hornáček WHILE @@FETCH_STATUS = 0 562*eeb7e5b3SAdam Hornáček BEGIN 563*eeb7e5b3SAdam Hornáček DELETE FROM ASPStateTempSessions WHERE SessionId = @SessionId AND Expires < @now 564*eeb7e5b3SAdam Hornáček FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId 565*eeb7e5b3SAdam Hornáček END 566*eeb7e5b3SAdam Hornáček 567*eeb7e5b3SAdam Hornáček CLOSE ExpiredSessionCursor 568*eeb7e5b3SAdam Hornáček 569*eeb7e5b3SAdam Hornáček DEALLOCATE ExpiredSessionCursor 570*eeb7e5b3SAdam Hornáček 571*eeb7e5b3SAdam Hornáček END 572*eeb7e5b3SAdam Hornáček 573*eeb7e5b3SAdam Hornáček DROP TABLE #tblExpiredSessions 574*eeb7e5b3SAdam Hornáček 575*eeb7e5b3SAdam HornáčekRETURN 0 576*eeb7e5b3SAdam HornáčekGO 577*eeb7e5b3SAdam Hornáček 578*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[GetHashCode] 579*eeb7e5b3SAdam Hornáček @input tAppName, 580*eeb7e5b3SAdam Hornáček @hash int OUTPUT 581*eeb7e5b3SAdam HornáčekAS 582*eeb7e5b3SAdam Hornáček /* 583*eeb7e5b3SAdam Hornáček This sproc is based on this C# hash function: 584*eeb7e5b3SAdam Hornáček 585*eeb7e5b3SAdam Hornáček int GetHashCode(string s) 586*eeb7e5b3SAdam Hornáček { 587*eeb7e5b3SAdam Hornáček int hash = 5381; 588*eeb7e5b3SAdam Hornáček int len = s.Length; 589*eeb7e5b3SAdam Hornáček 590*eeb7e5b3SAdam Hornáček for (int i = 0; i < len; i++) { 591*eeb7e5b3SAdam Hornáček int c = Convert.ToInt32(s[i]); 592*eeb7e5b3SAdam Hornáček hash = ((hash << 5) + hash) ^ c; 593*eeb7e5b3SAdam Hornáček } 594*eeb7e5b3SAdam Hornáček 595*eeb7e5b3SAdam Hornáček return hash; 596*eeb7e5b3SAdam Hornáček } 597*eeb7e5b3SAdam Hornáček 598*eeb7e5b3SAdam Hornáček However, SQL 7 doesn't provide a 32-bit integer 599*eeb7e5b3SAdam Hornáček type that allows rollover of bits, we have to 600*eeb7e5b3SAdam Hornáček divide our 32bit integer into the upper and lower 601*eeb7e5b3SAdam Hornáček 16 bits to do our calculation. 602*eeb7e5b3SAdam Hornáček */ 603*eeb7e5b3SAdam Hornáček 604*eeb7e5b3SAdam Hornáček DECLARE @hi_16bit int 605*eeb7e5b3SAdam Hornáček DECLARE @lo_16bit int 606*eeb7e5b3SAdam Hornáček DECLARE @hi_t int 607*eeb7e5b3SAdam Hornáček DECLARE @lo_t int 608*eeb7e5b3SAdam Hornáček DECLARE @len int 609*eeb7e5b3SAdam Hornáček DECLARE @i int 610*eeb7e5b3SAdam Hornáček DECLARE @c int 611*eeb7e5b3SAdam Hornáček DECLARE @carry int 612*eeb7e5b3SAdam Hornáček 613*eeb7e5b3SAdam Hornáček SET @hi_16bit = 0 614*eeb7e5b3SAdam Hornáček SET @lo_16bit = 5381 615*eeb7e5b3SAdam Hornáček 616*eeb7e5b3SAdam Hornáček SET @len = DATALENGTH(@input) 617*eeb7e5b3SAdam Hornáček SET @i = 1 618*eeb7e5b3SAdam Hornáček 619*eeb7e5b3SAdam Hornáček WHILE (@i <= @len) 620*eeb7e5b3SAdam Hornáček BEGIN 621*eeb7e5b3SAdam Hornáček SET @c = ASCII(SUBSTRING(@input, @i, 1)) 622*eeb7e5b3SAdam Hornáček 623*eeb7e5b3SAdam Hornáček /* Formula: 624*eeb7e5b3SAdam Hornáček hash = ((hash << 5) + hash) ^ c */ 625*eeb7e5b3SAdam Hornáček 626*eeb7e5b3SAdam Hornáček /* hash << 5 */ 627*eeb7e5b3SAdam Hornáček SET @hi_t = @hi_16bit * 32 /* high 16bits << 5 */ 628*eeb7e5b3SAdam Hornáček SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */ 629*eeb7e5b3SAdam Hornáček 630*eeb7e5b3SAdam Hornáček SET @lo_t = @lo_16bit * 32 /* low 16bits << 5 */ 631*eeb7e5b3SAdam Hornáček 632*eeb7e5b3SAdam Hornáček SET @carry = @lo_16bit & 0x1F0000 /* move low 16bits carryover to hi 16bits */ 633*eeb7e5b3SAdam Hornáček SET @carry = @carry / 0x10000 /* >> 16 */ 634*eeb7e5b3SAdam Hornáček SET @hi_t = @hi_t + @carry 635*eeb7e5b3SAdam Hornáček SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */ 636*eeb7e5b3SAdam Hornáček 637*eeb7e5b3SAdam Hornáček /* + hash */ 638*eeb7e5b3SAdam Hornáček SET @lo_16bit = @lo_16bit + @lo_t 639*eeb7e5b3SAdam Hornáček SET @hi_16bit = @hi_16bit + @hi_t + (@lo_16bit / 0x10000) 640*eeb7e5b3SAdam Hornáček /* delay clearing the overflow */ 641*eeb7e5b3SAdam Hornáček 642*eeb7e5b3SAdam Hornáček /* ^c */ 643*eeb7e5b3SAdam Hornáček SET @lo_16bit = @lo_16bit ^ @c 644*eeb7e5b3SAdam Hornáček 645*eeb7e5b3SAdam Hornáček /* Now clear the overflow bits */ 646*eeb7e5b3SAdam Hornáček SET @hi_16bit = @hi_16bit & 0xFFFF 647*eeb7e5b3SAdam Hornáček SET @lo_16bit = @lo_16bit & 0xFFFF 648*eeb7e5b3SAdam Hornáček 649*eeb7e5b3SAdam Hornáček SET @i = @i + 1 650*eeb7e5b3SAdam Hornáček END 651*eeb7e5b3SAdam Hornáček 652*eeb7e5b3SAdam Hornáček /* Do a sign extension of the hi-16bit if needed */ 653*eeb7e5b3SAdam Hornáček IF (@hi_16bit & 0x8000 <> 0) 654*eeb7e5b3SAdam Hornáček SET @hi_16bit = 0xFFFF0000 | @hi_16bit 655*eeb7e5b3SAdam Hornáček 656*eeb7e5b3SAdam Hornáček /* Merge hi and lo 16bit back together */ 657*eeb7e5b3SAdam Hornáček SET @hi_16bit = @hi_16bit * 0x10000 /* << 16 */ 658*eeb7e5b3SAdam Hornáček SET @hash = @hi_16bit | @lo_16bit 659*eeb7e5b3SAdam Hornáček 660*eeb7e5b3SAdam Hornáček RETURN 0 661*eeb7e5b3SAdam Hornáček 662*eeb7e5b3SAdam HornáčekGO 663*eeb7e5b3SAdam Hornáček 664*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[GetMajorVersion] 665*eeb7e5b3SAdam Hornáček @@ver int OUTPUT 666*eeb7e5b3SAdam HornáčekAS 667*eeb7e5b3SAdam HornáčekBEGIN 668*eeb7e5b3SAdam Hornáček DECLARE @version nchar(100) 669*eeb7e5b3SAdam Hornáček DECLARE @dot int 670*eeb7e5b3SAdam Hornáček DECLARE @hyphen int 671*eeb7e5b3SAdam Hornáček DECLARE @SqlToExec nchar(4000) 672*eeb7e5b3SAdam Hornáček 673*eeb7e5b3SAdam Hornáček SELECT @@ver = 7 674*eeb7e5b3SAdam Hornáček SELECT @version = @@Version 675*eeb7e5b3SAdam Hornáček SELECT @hyphen = CHARINDEX(N' - ', @version) 676*eeb7e5b3SAdam Hornáček IF (NOT(@hyphen IS NULL) AND @hyphen > 0) 677*eeb7e5b3SAdam Hornáček BEGIN 678*eeb7e5b3SAdam Hornáček SELECT @hyphen = @hyphen + 3 679*eeb7e5b3SAdam Hornáček SELECT @dot = CHARINDEX(N'.', @version, @hyphen) 680*eeb7e5b3SAdam Hornáček IF (NOT(@dot IS NULL) AND @dot > @hyphen) 681*eeb7e5b3SAdam Hornáček BEGIN 682*eeb7e5b3SAdam Hornáček SELECT @version = SUBSTRING(@version, @hyphen, @dot - @hyphen) 683*eeb7e5b3SAdam Hornáček SELECT @@ver = CONVERT(int, @version) 684*eeb7e5b3SAdam Hornáček END 685*eeb7e5b3SAdam Hornáček END 686*eeb7e5b3SAdam HornáčekEND 687*eeb7e5b3SAdam HornáčekGO 688*eeb7e5b3SAdam Hornáček 689*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetAppID] 690*eeb7e5b3SAdam Hornáček @appName VARCHAR(280), --@appName tAppName, 691*eeb7e5b3SAdam Hornáček @appId int OUTPUT 692*eeb7e5b3SAdam HornáčekAS 693*eeb7e5b3SAdam Hornáček SET @appName = LOWER(@appName) 694*eeb7e5b3SAdam Hornáček SET @appId = NULL 695*eeb7e5b3SAdam Hornáček 696*eeb7e5b3SAdam Hornáček SELECT @appId = AppId 697*eeb7e5b3SAdam Hornáček FROM ASPStateTempApplications 698*eeb7e5b3SAdam Hornáček WHERE AppName = @appName 699*eeb7e5b3SAdam Hornáček 700*eeb7e5b3SAdam Hornáček IF @appId IS NULL BEGIN 701*eeb7e5b3SAdam Hornáček BEGIN TRAN 702*eeb7e5b3SAdam Hornáček 703*eeb7e5b3SAdam Hornáček SELECT @appId = AppId 704*eeb7e5b3SAdam Hornáček FROM ASPStateTempApplications WITH (TABLOCKX) 705*eeb7e5b3SAdam Hornáček WHERE AppName = @appName 706*eeb7e5b3SAdam Hornáček 707*eeb7e5b3SAdam Hornáček IF @appId IS NULL 708*eeb7e5b3SAdam Hornáček BEGIN 709*eeb7e5b3SAdam Hornáček EXEC GetHashCode @appName, @appId OUTPUT 710*eeb7e5b3SAdam Hornáček 711*eeb7e5b3SAdam Hornáček INSERT ASPStateTempApplications 712*eeb7e5b3SAdam Hornáček VALUES 713*eeb7e5b3SAdam Hornáček (@appId, @appName) 714*eeb7e5b3SAdam Hornáček 715*eeb7e5b3SAdam Hornáček IF @@ERROR = 2627 716*eeb7e5b3SAdam Hornáček BEGIN 717*eeb7e5b3SAdam Hornáček DECLARE @dupApp tAppName 718*eeb7e5b3SAdam Hornáček 719*eeb7e5b3SAdam Hornáček SELECT @dupApp = RTRIM(AppName) 720*eeb7e5b3SAdam Hornáček FROM ASPStateTempApplications 721*eeb7e5b3SAdam Hornáček WHERE AppId = @appId 722*eeb7e5b3SAdam Hornáček 723*eeb7e5b3SAdam Hornáček RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.', 724*eeb7e5b3SAdam Hornáček 18, 1, @appName, @dupApp) 725*eeb7e5b3SAdam Hornáček END 726*eeb7e5b3SAdam Hornáček END 727*eeb7e5b3SAdam Hornáček COMMIT 728*eeb7e5b3SAdam Hornáček END 729*eeb7e5b3SAdam Hornáček 730*eeb7e5b3SAdam HornáčekRETURN 0 731*eeb7e5b3SAdam Hornáček 732*eeb7e5b3SAdam HornáčekGO 733*eeb7e5b3SAdam Hornáček 734*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItem] 735*eeb7e5b3SAdam Hornáček @id tSessionId, 736*eeb7e5b3SAdam Hornáček @itemShort tSessionItemShort OUTPUT, 737*eeb7e5b3SAdam Hornáček @locked bit OUTPUT, 738*eeb7e5b3SAdam Hornáček @lockDate datetime OUTPUT, 739*eeb7e5b3SAdam Hornáček @lockCookie int OUTPUT 740*eeb7e5b3SAdam HornáčekAS 741*eeb7e5b3SAdam Hornáček DECLARE @textptr AS tTextPtr 742*eeb7e5b3SAdam Hornáček DECLARE @length AS int 743*eeb7e5b3SAdam Hornáček DECLARE @now AS datetime 744*eeb7e5b3SAdam Hornáček SET @now = GETUTCDATE() 745*eeb7e5b3SAdam Hornáček 746*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 747*eeb7e5b3SAdam Hornáček 748*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 749*eeb7e5b3SAdam Hornáček BEGIN 750*eeb7e5b3SAdam Hornáček BEGIN TRY 751*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 752*eeb7e5b3SAdam Hornáček 753*eeb7e5b3SAdam Hornáček UPDATE ASPStateTempSessions 754*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, Timeout, @now), 755*eeb7e5b3SAdam Hornáček @locked = Locked, 756*eeb7e5b3SAdam Hornáček @lockDate = LockDateLocal, 757*eeb7e5b3SAdam Hornáček @lockCookie = LockCookie, 758*eeb7e5b3SAdam Hornáček @itemShort = CASE @locked 759*eeb7e5b3SAdam Hornáček WHEN 0 THEN SessionItemShort 760*eeb7e5b3SAdam Hornáček ELSE NULL 761*eeb7e5b3SAdam Hornáček END, 762*eeb7e5b3SAdam Hornáček @textptr = CASE @locked 763*eeb7e5b3SAdam Hornáček WHEN 0 THEN SessionItemLong 764*eeb7e5b3SAdam Hornáček ELSE NULL 765*eeb7e5b3SAdam Hornáček END, 766*eeb7e5b3SAdam Hornáček @length = CASE @locked 767*eeb7e5b3SAdam Hornáček WHEN 0 THEN DATALENGTH(SessionItemLong) 768*eeb7e5b3SAdam Hornáček ELSE NULL 769*eeb7e5b3SAdam Hornáček END 770*eeb7e5b3SAdam Hornáček WHERE SessionId = @id 771*eeb7e5b3SAdam Hornáček IF @length IS NOT NULL BEGIN 772*eeb7e5b3SAdam Hornáček SELECT @textptr 773*eeb7e5b3SAdam Hornáček END 774*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 775*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 776*eeb7e5b3SAdam Hornáček END TRY 777*eeb7e5b3SAdam Hornáček 778*eeb7e5b3SAdam Hornáček BEGIN CATCH 779*eeb7e5b3SAdam Hornáček SET @retry -= 1; 780*eeb7e5b3SAdam Hornáček 781*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 782*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 783*eeb7e5b3SAdam Hornáček ) 784*eeb7e5b3SAdam Hornáček BEGIN 785*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 786*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 787*eeb7e5b3SAdam Hornáček 788*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 789*eeb7e5b3SAdam Hornáček END 790*eeb7e5b3SAdam Hornáček ELSE 791*eeb7e5b3SAdam Hornáček BEGIN 792*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 793*eeb7e5b3SAdam Hornáček THROW; 794*eeb7e5b3SAdam Hornáček END 795*eeb7e5b3SAdam Hornáček END CATCH 796*eeb7e5b3SAdam Hornáček 797*eeb7e5b3SAdam Hornáček END -- //While loop 798*eeb7e5b3SAdam Hornáček RETURN 0 799*eeb7e5b3SAdam HornáčekGO 800*eeb7e5b3SAdam Hornáček 801*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItem2] 802*eeb7e5b3SAdam Hornáček @id tSessionId, 803*eeb7e5b3SAdam Hornáček @itemShort tSessionItemShort OUTPUT, 804*eeb7e5b3SAdam Hornáček @locked bit OUTPUT, 805*eeb7e5b3SAdam Hornáček @lockAge int OUTPUT, 806*eeb7e5b3SAdam Hornáček @lockCookie int OUTPUT 807*eeb7e5b3SAdam HornáčekAS 808*eeb7e5b3SAdam Hornáček DECLARE @textptr AS tTextPtr 809*eeb7e5b3SAdam Hornáček DECLARE @length AS int 810*eeb7e5b3SAdam Hornáček DECLARE @now AS datetime 811*eeb7e5b3SAdam Hornáček SET @now = GETUTCDATE() 812*eeb7e5b3SAdam Hornáček 813*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 814*eeb7e5b3SAdam Hornáček 815*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 816*eeb7e5b3SAdam Hornáček BEGIN 817*eeb7e5b3SAdam Hornáček BEGIN TRY 818*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 819*eeb7e5b3SAdam Hornáček UPDATE ASPStateTempSessions 820*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, Timeout, @now), 821*eeb7e5b3SAdam Hornáček @locked = Locked, 822*eeb7e5b3SAdam Hornáček @lockAge = DATEDIFF(second, LockDate, @now), 823*eeb7e5b3SAdam Hornáček @lockCookie = LockCookie, 824*eeb7e5b3SAdam Hornáček @itemShort = CASE @locked 825*eeb7e5b3SAdam Hornáček WHEN 0 THEN SessionItemShort 826*eeb7e5b3SAdam Hornáček ELSE NULL 827*eeb7e5b3SAdam Hornáček END, 828*eeb7e5b3SAdam Hornáček @textptr = CASE @locked 829*eeb7e5b3SAdam Hornáček WHEN 0 THEN SessionItemLong 830*eeb7e5b3SAdam Hornáček ELSE NULL 831*eeb7e5b3SAdam Hornáček END, 832*eeb7e5b3SAdam Hornáček @length = CASE @locked 833*eeb7e5b3SAdam Hornáček WHEN 0 THEN DATALENGTH(SessionItemLong) 834*eeb7e5b3SAdam Hornáček ELSE NULL 835*eeb7e5b3SAdam Hornáček END 836*eeb7e5b3SAdam Hornáček WHERE SessionId = @id 837*eeb7e5b3SAdam Hornáček IF @length IS NOT NULL BEGIN 838*eeb7e5b3SAdam Hornáček SELECT @textptr 839*eeb7e5b3SAdam Hornáček END 840*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 841*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 842*eeb7e5b3SAdam Hornáček END TRY 843*eeb7e5b3SAdam Hornáček 844*eeb7e5b3SAdam Hornáček BEGIN CATCH 845*eeb7e5b3SAdam Hornáček SET @retry -= 1; 846*eeb7e5b3SAdam Hornáček 847*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 848*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 849*eeb7e5b3SAdam Hornáček ) 850*eeb7e5b3SAdam Hornáček BEGIN 851*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 852*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 853*eeb7e5b3SAdam Hornáček 854*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 855*eeb7e5b3SAdam Hornáček END 856*eeb7e5b3SAdam Hornáček ELSE 857*eeb7e5b3SAdam Hornáček BEGIN 858*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 859*eeb7e5b3SAdam Hornáček THROW; 860*eeb7e5b3SAdam Hornáček END 861*eeb7e5b3SAdam Hornáček END CATCH 862*eeb7e5b3SAdam Hornáček 863*eeb7e5b3SAdam Hornáček END -- //While loop 864*eeb7e5b3SAdam Hornáček RETURN 0 865*eeb7e5b3SAdam HornáčekGO 866*eeb7e5b3SAdam Hornáček 867*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItem3] 868*eeb7e5b3SAdam Hornáček @id nvarchar(88), 869*eeb7e5b3SAdam Hornáček @itemShort varbinary(7000) OUTPUT, 870*eeb7e5b3SAdam Hornáček @locked bit OUTPUT, 871*eeb7e5b3SAdam Hornáček @lockAge int OUTPUT, 872*eeb7e5b3SAdam Hornáček @lockCookie int OUTPUT, 873*eeb7e5b3SAdam Hornáček @actionFlags int OUTPUT 874*eeb7e5b3SAdam HornáčekAS 875*eeb7e5b3SAdam Hornáček DECLARE @textptr AS tTextPtr 876*eeb7e5b3SAdam Hornáček DECLARE @length AS int 877*eeb7e5b3SAdam Hornáček DECLARE @now AS datetime 878*eeb7e5b3SAdam Hornáček SET @now = GETUTCDATE() 879*eeb7e5b3SAdam Hornáček 880*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 881*eeb7e5b3SAdam Hornáček 882*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 883*eeb7e5b3SAdam Hornáček BEGIN 884*eeb7e5b3SAdam Hornáček BEGIN TRY 885*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 886*eeb7e5b3SAdam Hornáček UPDATE ASPStateTempSessions 887*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, Timeout, @now), 888*eeb7e5b3SAdam Hornáček @locked = Locked, 889*eeb7e5b3SAdam Hornáček @lockAge = DATEDIFF(second, LockDate, @now), 890*eeb7e5b3SAdam Hornáček @lockCookie = LockCookie, 891*eeb7e5b3SAdam Hornáček @itemShort = CASE @locked 892*eeb7e5b3SAdam Hornáček WHEN 0 THEN SessionItemShort 893*eeb7e5b3SAdam Hornáček ELSE NULL 894*eeb7e5b3SAdam Hornáček END, 895*eeb7e5b3SAdam Hornáček @textptr = CASE @locked 896*eeb7e5b3SAdam Hornáček WHEN 0 THEN SessionItemLong 897*eeb7e5b3SAdam Hornáček ELSE NULL 898*eeb7e5b3SAdam Hornáček END, 899*eeb7e5b3SAdam Hornáček @length = CASE @locked 900*eeb7e5b3SAdam Hornáček WHEN 0 THEN DATALENGTH(SessionItemLong) 901*eeb7e5b3SAdam Hornáček ELSE NULL 902*eeb7e5b3SAdam Hornáček END, 903*eeb7e5b3SAdam Hornáček 904*eeb7e5b3SAdam Hornáček /* If the Uninitialized flag (0x1) if it is set, 905*eeb7e5b3SAdam Hornáček remove it and return InitializeItem (0x1) in actionFlags */ 906*eeb7e5b3SAdam Hornáček Flags = CASE 907*eeb7e5b3SAdam Hornáček WHEN (Flags & 1) <> 0 THEN (Flags & ~1) 908*eeb7e5b3SAdam Hornáček ELSE Flags 909*eeb7e5b3SAdam Hornáček END, 910*eeb7e5b3SAdam Hornáček @actionFlags = CASE 911*eeb7e5b3SAdam Hornáček WHEN (Flags & 1) <> 0 THEN 1 912*eeb7e5b3SAdam Hornáček ELSE 0 913*eeb7e5b3SAdam Hornáček END 914*eeb7e5b3SAdam Hornáček WHERE SessionId = @id 915*eeb7e5b3SAdam Hornáček IF @length IS NOT NULL BEGIN 916*eeb7e5b3SAdam Hornáček SELECT @textptr 917*eeb7e5b3SAdam Hornáček END 918*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 919*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 920*eeb7e5b3SAdam Hornáček END TRY 921*eeb7e5b3SAdam Hornáček 922*eeb7e5b3SAdam Hornáček BEGIN CATCH 923*eeb7e5b3SAdam Hornáček SET @retry -= 1; 924*eeb7e5b3SAdam Hornáček 925*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 926*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 927*eeb7e5b3SAdam Hornáček ) 928*eeb7e5b3SAdam Hornáček BEGIN 929*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 930*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 931*eeb7e5b3SAdam Hornáček 932*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 933*eeb7e5b3SAdam Hornáček END 934*eeb7e5b3SAdam Hornáček ELSE 935*eeb7e5b3SAdam Hornáček BEGIN 936*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 937*eeb7e5b3SAdam Hornáček THROW; 938*eeb7e5b3SAdam Hornáček END 939*eeb7e5b3SAdam Hornáček END CATCH 940*eeb7e5b3SAdam Hornáček 941*eeb7e5b3SAdam Hornáček END -- //While loop 942*eeb7e5b3SAdam Hornáček RETURN 0 943*eeb7e5b3SAdam HornáčekGO 944*eeb7e5b3SAdam Hornáček 945*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItemExclusive] 946*eeb7e5b3SAdam Hornáček @id tSessionId, 947*eeb7e5b3SAdam Hornáček @itemShort tSessionItemShort OUTPUT, 948*eeb7e5b3SAdam Hornáček @locked bit OUTPUT, 949*eeb7e5b3SAdam Hornáček @lockDate datetime OUTPUT, 950*eeb7e5b3SAdam Hornáček @lockCookie int OUTPUT 951*eeb7e5b3SAdam HornáčekAS 952*eeb7e5b3SAdam Hornáček DECLARE @textptr AS tTextPtr 953*eeb7e5b3SAdam Hornáček DECLARE @length AS int 954*eeb7e5b3SAdam Hornáček DECLARE @now AS datetime 955*eeb7e5b3SAdam Hornáček DECLARE @nowLocal AS datetime 956*eeb7e5b3SAdam Hornáček 957*eeb7e5b3SAdam Hornáček SET @now = GETUTCDATE() 958*eeb7e5b3SAdam Hornáček SET @nowLocal = GETDATE() 959*eeb7e5b3SAdam Hornáček 960*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 961*eeb7e5b3SAdam Hornáček 962*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 963*eeb7e5b3SAdam Hornáček BEGIN 964*eeb7e5b3SAdam Hornáček BEGIN TRY 965*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 966*eeb7e5b3SAdam Hornáček UPDATE ASPStateTempSessions 967*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, Timeout, @now), 968*eeb7e5b3SAdam Hornáček LockDate = CASE Locked 969*eeb7e5b3SAdam Hornáček WHEN 0 THEN @now 970*eeb7e5b3SAdam Hornáček ELSE LockDate 971*eeb7e5b3SAdam Hornáček END, 972*eeb7e5b3SAdam Hornáček @lockDate = LockDateLocal = CASE Locked 973*eeb7e5b3SAdam Hornáček WHEN 0 THEN @nowLocal 974*eeb7e5b3SAdam Hornáček ELSE LockDateLocal 975*eeb7e5b3SAdam Hornáček END, 976*eeb7e5b3SAdam Hornáček @lockCookie = LockCookie = CASE Locked 977*eeb7e5b3SAdam Hornáček WHEN 0 THEN LockCookie + 1 978*eeb7e5b3SAdam Hornáček ELSE LockCookie 979*eeb7e5b3SAdam Hornáček END, 980*eeb7e5b3SAdam Hornáček @itemShort = CASE Locked 981*eeb7e5b3SAdam Hornáček WHEN 0 THEN SessionItemShort 982*eeb7e5b3SAdam Hornáček ELSE NULL 983*eeb7e5b3SAdam Hornáček END, 984*eeb7e5b3SAdam Hornáček @textptr = CASE Locked 985*eeb7e5b3SAdam Hornáček WHEN 0 THEN SessionItemLong 986*eeb7e5b3SAdam Hornáček ELSE NULL 987*eeb7e5b3SAdam Hornáček END, 988*eeb7e5b3SAdam Hornáček @length = CASE Locked 989*eeb7e5b3SAdam Hornáček WHEN 0 THEN DATALENGTH(SessionItemLong) 990*eeb7e5b3SAdam Hornáček ELSE NULL 991*eeb7e5b3SAdam Hornáček END, 992*eeb7e5b3SAdam Hornáček @locked = Locked, 993*eeb7e5b3SAdam Hornáček Locked = 1 994*eeb7e5b3SAdam Hornáček WHERE SessionId = @id 995*eeb7e5b3SAdam Hornáček IF @length IS NOT NULL BEGIN 996*eeb7e5b3SAdam Hornáček SELECT @textptr 997*eeb7e5b3SAdam Hornáček END 998*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 999*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 1000*eeb7e5b3SAdam Hornáček END TRY 1001*eeb7e5b3SAdam Hornáček 1002*eeb7e5b3SAdam Hornáček BEGIN CATCH 1003*eeb7e5b3SAdam Hornáček SET @retry -= 1; 1004*eeb7e5b3SAdam Hornáček 1005*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 1006*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 1007*eeb7e5b3SAdam Hornáček ) 1008*eeb7e5b3SAdam Hornáček BEGIN 1009*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 1010*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 1011*eeb7e5b3SAdam Hornáček 1012*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 1013*eeb7e5b3SAdam Hornáček END 1014*eeb7e5b3SAdam Hornáček ELSE 1015*eeb7e5b3SAdam Hornáček BEGIN 1016*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 1017*eeb7e5b3SAdam Hornáček THROW; 1018*eeb7e5b3SAdam Hornáček END 1019*eeb7e5b3SAdam Hornáček END CATCH 1020*eeb7e5b3SAdam Hornáček 1021*eeb7e5b3SAdam Hornáček END -- //While loop 1022*eeb7e5b3SAdam Hornáček RETURN 0 1023*eeb7e5b3SAdam HornáčekGO 1024*eeb7e5b3SAdam Hornáček 1025*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItemExclusive2] 1026*eeb7e5b3SAdam Hornáček @id tSessionId, 1027*eeb7e5b3SAdam Hornáček @itemShort tSessionItemShort OUTPUT, 1028*eeb7e5b3SAdam Hornáček @locked bit OUTPUT, 1029*eeb7e5b3SAdam Hornáček @lockAge int OUTPUT, 1030*eeb7e5b3SAdam Hornáček @lockCookie int OUTPUT 1031*eeb7e5b3SAdam HornáčekAS 1032*eeb7e5b3SAdam Hornáček DECLARE @textptr AS tTextPtr 1033*eeb7e5b3SAdam Hornáček DECLARE @length AS int 1034*eeb7e5b3SAdam Hornáček DECLARE @now AS datetime 1035*eeb7e5b3SAdam Hornáček DECLARE @nowLocal AS datetime 1036*eeb7e5b3SAdam Hornáček 1037*eeb7e5b3SAdam Hornáček SET @now = GETUTCDATE() 1038*eeb7e5b3SAdam Hornáček SET @nowLocal = GETDATE() 1039*eeb7e5b3SAdam Hornáček 1040*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 1041*eeb7e5b3SAdam Hornáček 1042*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 1043*eeb7e5b3SAdam Hornáček BEGIN 1044*eeb7e5b3SAdam Hornáček BEGIN TRY 1045*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 1046*eeb7e5b3SAdam Hornáček UPDATE ASPStateTempSessions 1047*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, Timeout, @now), 1048*eeb7e5b3SAdam Hornáček LockDate = CASE Locked 1049*eeb7e5b3SAdam Hornáček WHEN 0 THEN @now 1050*eeb7e5b3SAdam Hornáček ELSE LockDate 1051*eeb7e5b3SAdam Hornáček END, 1052*eeb7e5b3SAdam Hornáček LockDateLocal = CASE Locked 1053*eeb7e5b3SAdam Hornáček WHEN 0 THEN @nowLocal 1054*eeb7e5b3SAdam Hornáček ELSE LockDateLocal 1055*eeb7e5b3SAdam Hornáček END, 1056*eeb7e5b3SAdam Hornáček @lockAge = CASE Locked 1057*eeb7e5b3SAdam Hornáček WHEN 0 THEN 0 1058*eeb7e5b3SAdam Hornáček ELSE DATEDIFF(second, LockDate, @now) 1059*eeb7e5b3SAdam Hornáček END, 1060*eeb7e5b3SAdam Hornáček @lockCookie = LockCookie = CASE Locked 1061*eeb7e5b3SAdam Hornáček WHEN 0 THEN LockCookie + 1 1062*eeb7e5b3SAdam Hornáček ELSE LockCookie 1063*eeb7e5b3SAdam Hornáček END, 1064*eeb7e5b3SAdam Hornáček @itemShort = CASE Locked 1065*eeb7e5b3SAdam Hornáček WHEN 0 THEN SessionItemShort 1066*eeb7e5b3SAdam Hornáček ELSE NULL 1067*eeb7e5b3SAdam Hornáček END, 1068*eeb7e5b3SAdam Hornáček @textptr = CASE Locked 1069*eeb7e5b3SAdam Hornáček WHEN 0 THEN SessionItemLong 1070*eeb7e5b3SAdam Hornáček ELSE NULL 1071*eeb7e5b3SAdam Hornáček END, 1072*eeb7e5b3SAdam Hornáček @length = CASE Locked 1073*eeb7e5b3SAdam Hornáček WHEN 0 THEN DATALENGTH(SessionItemLong) 1074*eeb7e5b3SAdam Hornáček ELSE NULL 1075*eeb7e5b3SAdam Hornáček END, 1076*eeb7e5b3SAdam Hornáček @locked = Locked, 1077*eeb7e5b3SAdam Hornáček Locked = 1 1078*eeb7e5b3SAdam Hornáček WHERE SessionId = @id 1079*eeb7e5b3SAdam Hornáček IF @length IS NOT NULL BEGIN 1080*eeb7e5b3SAdam Hornáček SELECT @textptr 1081*eeb7e5b3SAdam Hornáček END 1082*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 1083*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 1084*eeb7e5b3SAdam Hornáček END TRY 1085*eeb7e5b3SAdam Hornáček 1086*eeb7e5b3SAdam Hornáček BEGIN CATCH 1087*eeb7e5b3SAdam Hornáček SET @retry -= 1; 1088*eeb7e5b3SAdam Hornáček 1089*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 1090*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 1091*eeb7e5b3SAdam Hornáček ) 1092*eeb7e5b3SAdam Hornáček BEGIN 1093*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 1094*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 1095*eeb7e5b3SAdam Hornáček 1096*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 1097*eeb7e5b3SAdam Hornáček END 1098*eeb7e5b3SAdam Hornáček ELSE 1099*eeb7e5b3SAdam Hornáček BEGIN 1100*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 1101*eeb7e5b3SAdam Hornáček THROW; 1102*eeb7e5b3SAdam Hornáček END 1103*eeb7e5b3SAdam Hornáček END CATCH 1104*eeb7e5b3SAdam Hornáček 1105*eeb7e5b3SAdam Hornáček END -- //While loop 1106*eeb7e5b3SAdam Hornáček RETURN 0 1107*eeb7e5b3SAdam HornáčekGO 1108*eeb7e5b3SAdam Hornáček 1109*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetVersion] 1110*eeb7e5b3SAdam Hornáček @ver char(10) OUTPUT 1111*eeb7e5b3SAdam HornáčekAS 1112*eeb7e5b3SAdam Hornáček SELECT @ver = '2' 1113*eeb7e5b3SAdam Hornáček RETURN 0 1114*eeb7e5b3SAdam HornáčekGO 1115*eeb7e5b3SAdam Hornáček 1116*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempInsertStateItemLong] 1117*eeb7e5b3SAdam Hornáček @id nvarchar(88), 1118*eeb7e5b3SAdam Hornáček @itemLong image, 1119*eeb7e5b3SAdam Hornáček @timeout int 1120*eeb7e5b3SAdam HornáčekAS 1121*eeb7e5b3SAdam Hornáček DECLARE @now AS datetime 1122*eeb7e5b3SAdam Hornáček DECLARE @nowLocal AS datetime 1123*eeb7e5b3SAdam Hornáček 1124*eeb7e5b3SAdam Hornáček SET @now = GETUTCDATE() 1125*eeb7e5b3SAdam Hornáček SET @nowLocal = GETDATE() 1126*eeb7e5b3SAdam Hornáček 1127*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 1128*eeb7e5b3SAdam Hornáček 1129*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 1130*eeb7e5b3SAdam Hornáček BEGIN 1131*eeb7e5b3SAdam Hornáček BEGIN TRY 1132*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 1133*eeb7e5b3SAdam Hornáček INSERT ASPStateTempSessions 1134*eeb7e5b3SAdam Hornáček (SessionId, 1135*eeb7e5b3SAdam Hornáček SessionItemLong, 1136*eeb7e5b3SAdam Hornáček Timeout, 1137*eeb7e5b3SAdam Hornáček Expires, 1138*eeb7e5b3SAdam Hornáček Locked, 1139*eeb7e5b3SAdam Hornáček LockDate, 1140*eeb7e5b3SAdam Hornáček LockDateLocal, 1141*eeb7e5b3SAdam Hornáček LockCookie) 1142*eeb7e5b3SAdam Hornáček VALUES 1143*eeb7e5b3SAdam Hornáček (@id, 1144*eeb7e5b3SAdam Hornáček @itemLong, 1145*eeb7e5b3SAdam Hornáček @timeout, 1146*eeb7e5b3SAdam Hornáček DATEADD(n, @timeout, @now), 1147*eeb7e5b3SAdam Hornáček 0, 1148*eeb7e5b3SAdam Hornáček @now, 1149*eeb7e5b3SAdam Hornáček @nowLocal, 1150*eeb7e5b3SAdam Hornáček 1) 1151*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 1152*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 1153*eeb7e5b3SAdam Hornáček END TRY 1154*eeb7e5b3SAdam Hornáček 1155*eeb7e5b3SAdam Hornáček BEGIN CATCH 1156*eeb7e5b3SAdam Hornáček SET @retry -= 1; 1157*eeb7e5b3SAdam Hornáček 1158*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 1159*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 1160*eeb7e5b3SAdam Hornáček ) 1161*eeb7e5b3SAdam Hornáček BEGIN 1162*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 1163*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 1164*eeb7e5b3SAdam Hornáček 1165*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 1166*eeb7e5b3SAdam Hornáček END 1167*eeb7e5b3SAdam Hornáček ELSE 1168*eeb7e5b3SAdam Hornáček BEGIN 1169*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 1170*eeb7e5b3SAdam Hornáček THROW; 1171*eeb7e5b3SAdam Hornáček END 1172*eeb7e5b3SAdam Hornáček END CATCH 1173*eeb7e5b3SAdam Hornáček 1174*eeb7e5b3SAdam Hornáček END -- //While loop 1175*eeb7e5b3SAdam Hornáček RETURN 0 1176*eeb7e5b3SAdam HornáčekGO 1177*eeb7e5b3SAdam Hornáček 1178*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempInsertUninitializedItem] 1179*eeb7e5b3SAdam Hornáček @id nvarchar(88), 1180*eeb7e5b3SAdam Hornáček @itemShort varbinary(7000), 1181*eeb7e5b3SAdam Hornáček @timeout int 1182*eeb7e5b3SAdam HornáčekAS 1183*eeb7e5b3SAdam Hornáček 1184*eeb7e5b3SAdam Hornáček DECLARE @now AS datetime 1185*eeb7e5b3SAdam Hornáček DECLARE @nowLocal AS datetime 1186*eeb7e5b3SAdam Hornáček 1187*eeb7e5b3SAdam Hornáček SET @now = GETUTCDATE() 1188*eeb7e5b3SAdam Hornáček SET @nowLocal = GETDATE() 1189*eeb7e5b3SAdam Hornáček 1190*eeb7e5b3SAdam Hornáček DECLARE @retry INT = 10; 1191*eeb7e5b3SAdam Hornáček 1192*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 1193*eeb7e5b3SAdam Hornáček BEGIN 1194*eeb7e5b3SAdam Hornáček BEGIN TRY 1195*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 1196*eeb7e5b3SAdam Hornáček INSERT ASPStateTempSessions 1197*eeb7e5b3SAdam Hornáček (SessionId, 1198*eeb7e5b3SAdam Hornáček SessionItemShort, 1199*eeb7e5b3SAdam Hornáček Timeout, 1200*eeb7e5b3SAdam Hornáček Expires, 1201*eeb7e5b3SAdam Hornáček Locked, 1202*eeb7e5b3SAdam Hornáček LockDate, 1203*eeb7e5b3SAdam Hornáček LockDateLocal, 1204*eeb7e5b3SAdam Hornáček LockCookie, 1205*eeb7e5b3SAdam Hornáček Flags) 1206*eeb7e5b3SAdam Hornáček VALUES 1207*eeb7e5b3SAdam Hornáček (@id, 1208*eeb7e5b3SAdam Hornáček @itemShort, 1209*eeb7e5b3SAdam Hornáček @timeout, 1210*eeb7e5b3SAdam Hornáček DATEADD(n, @timeout, @now), 1211*eeb7e5b3SAdam Hornáček 0, 1212*eeb7e5b3SAdam Hornáček @now, 1213*eeb7e5b3SAdam Hornáček @nowLocal, 1214*eeb7e5b3SAdam Hornáček 1, 1215*eeb7e5b3SAdam Hornáček 1) 1216*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 1217*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 1218*eeb7e5b3SAdam Hornáček END TRY 1219*eeb7e5b3SAdam Hornáček 1220*eeb7e5b3SAdam Hornáček BEGIN CATCH 1221*eeb7e5b3SAdam Hornáček SET @retry -= 1; 1222*eeb7e5b3SAdam Hornáček 1223*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 1224*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 1225*eeb7e5b3SAdam Hornáček ) 1226*eeb7e5b3SAdam Hornáček BEGIN 1227*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 1228*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 1229*eeb7e5b3SAdam Hornáček 1230*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 1231*eeb7e5b3SAdam Hornáček END 1232*eeb7e5b3SAdam Hornáček ELSE 1233*eeb7e5b3SAdam Hornáček BEGIN 1234*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 1235*eeb7e5b3SAdam Hornáček THROW; 1236*eeb7e5b3SAdam Hornáček END 1237*eeb7e5b3SAdam Hornáček END CATCH 1238*eeb7e5b3SAdam Hornáček 1239*eeb7e5b3SAdam Hornáček END -- //While loop 1240*eeb7e5b3SAdam Hornáček RETURN 0 1241*eeb7e5b3SAdam HornáčekGO 1242*eeb7e5b3SAdam Hornáček 1243*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempReleaseStateItemExclusive] 1244*eeb7e5b3SAdam Hornáček @id nvarchar(88), 1245*eeb7e5b3SAdam Hornáček @lockCookie int 1246*eeb7e5b3SAdam HornáčekAS 1247*eeb7e5b3SAdam HornáčekDECLARE @retry INT = 10; 1248*eeb7e5b3SAdam Hornáček 1249*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 1250*eeb7e5b3SAdam Hornáček BEGIN 1251*eeb7e5b3SAdam Hornáček BEGIN TRY 1252*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 1253*eeb7e5b3SAdam Hornáček UPDATE ASPStateTempSessions 1254*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 1255*eeb7e5b3SAdam Hornáček Locked = 0 1256*eeb7e5b3SAdam Hornáček WHERE SessionId = @id AND LockCookie = @lockCookie 1257*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 1258*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 1259*eeb7e5b3SAdam Hornáček END TRY 1260*eeb7e5b3SAdam Hornáček 1261*eeb7e5b3SAdam Hornáček BEGIN CATCH 1262*eeb7e5b3SAdam Hornáček SET @retry -= 1; 1263*eeb7e5b3SAdam Hornáček 1264*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 1265*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 1266*eeb7e5b3SAdam Hornáček ) 1267*eeb7e5b3SAdam Hornáček BEGIN 1268*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 1269*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 1270*eeb7e5b3SAdam Hornáček 1271*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 1272*eeb7e5b3SAdam Hornáček END 1273*eeb7e5b3SAdam Hornáček ELSE 1274*eeb7e5b3SAdam Hornáček BEGIN 1275*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 1276*eeb7e5b3SAdam Hornáček THROW; 1277*eeb7e5b3SAdam Hornáček END 1278*eeb7e5b3SAdam Hornáček END CATCH 1279*eeb7e5b3SAdam Hornáček 1280*eeb7e5b3SAdam Hornáček END -- //While loop 1281*eeb7e5b3SAdam Hornáček 1282*eeb7e5b3SAdam Hornáček RETURN 0 1283*eeb7e5b3SAdam HornáčekGO 1284*eeb7e5b3SAdam Hornáček 1285*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempRemoveStateItem] 1286*eeb7e5b3SAdam Hornáček @id nvarchar(88), 1287*eeb7e5b3SAdam Hornáček @lockCookie int 1288*eeb7e5b3SAdam HornáčekAS 1289*eeb7e5b3SAdam Hornáček 1290*eeb7e5b3SAdam HornáčekDECLARE @retry INT = 10; 1291*eeb7e5b3SAdam Hornáček 1292*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 1293*eeb7e5b3SAdam Hornáček BEGIN 1294*eeb7e5b3SAdam Hornáček BEGIN TRY 1295*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 1296*eeb7e5b3SAdam Hornáček DELETE ASPStateTempSessions 1297*eeb7e5b3SAdam Hornáček WHERE SessionId = @id AND LockCookie = @lockCookie 1298*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 1299*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 1300*eeb7e5b3SAdam Hornáček END TRY 1301*eeb7e5b3SAdam Hornáček 1302*eeb7e5b3SAdam Hornáček BEGIN CATCH 1303*eeb7e5b3SAdam Hornáček SET @retry -= 1; 1304*eeb7e5b3SAdam Hornáček 1305*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 1306*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 1307*eeb7e5b3SAdam Hornáček ) 1308*eeb7e5b3SAdam Hornáček BEGIN 1309*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 1310*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 1311*eeb7e5b3SAdam Hornáček 1312*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 1313*eeb7e5b3SAdam Hornáček END 1314*eeb7e5b3SAdam Hornáček ELSE 1315*eeb7e5b3SAdam Hornáček BEGIN 1316*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 1317*eeb7e5b3SAdam Hornáček THROW; 1318*eeb7e5b3SAdam Hornáček END 1319*eeb7e5b3SAdam Hornáček END CATCH 1320*eeb7e5b3SAdam Hornáček 1321*eeb7e5b3SAdam Hornáček END -- //While loop 1322*eeb7e5b3SAdam Hornáček RETURN 0 1323*eeb7e5b3SAdam HornáčekGO 1324*eeb7e5b3SAdam Hornáček 1325*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempResetTimeout] 1326*eeb7e5b3SAdam Hornáček @id nvarchar(88) 1327*eeb7e5b3SAdam HornáčekAS 1328*eeb7e5b3SAdam HornáčekDECLARE @retry INT = 10; 1329*eeb7e5b3SAdam Hornáček 1330*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 1331*eeb7e5b3SAdam Hornáček BEGIN 1332*eeb7e5b3SAdam Hornáček BEGIN TRY 1333*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 1334*eeb7e5b3SAdam Hornáček UPDATE ASPStateTempSessions 1335*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, Timeout, GETUTCDATE()) 1336*eeb7e5b3SAdam Hornáček WHERE SessionId = @id 1337*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 1338*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 1339*eeb7e5b3SAdam Hornáček END TRY 1340*eeb7e5b3SAdam Hornáček 1341*eeb7e5b3SAdam Hornáček BEGIN CATCH 1342*eeb7e5b3SAdam Hornáček SET @retry -= 1; 1343*eeb7e5b3SAdam Hornáček 1344*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 1345*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 1346*eeb7e5b3SAdam Hornáček ) 1347*eeb7e5b3SAdam Hornáček BEGIN 1348*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 1349*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 1350*eeb7e5b3SAdam Hornáček 1351*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 1352*eeb7e5b3SAdam Hornáček END 1353*eeb7e5b3SAdam Hornáček ELSE 1354*eeb7e5b3SAdam Hornáček BEGIN 1355*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 1356*eeb7e5b3SAdam Hornáček THROW; 1357*eeb7e5b3SAdam Hornáček END 1358*eeb7e5b3SAdam Hornáček END CATCH 1359*eeb7e5b3SAdam Hornáček 1360*eeb7e5b3SAdam Hornáček END -- //While loop 1361*eeb7e5b3SAdam Hornáček 1362*eeb7e5b3SAdam Hornáček RETURN 0 1363*eeb7e5b3SAdam HornáčekGO 1364*eeb7e5b3SAdam Hornáček 1365*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemShortNullLong] 1366*eeb7e5b3SAdam Hornáček @id nvarchar(88), 1367*eeb7e5b3SAdam Hornáček @itemShort varbinary(7000), 1368*eeb7e5b3SAdam Hornáček @timeout int, 1369*eeb7e5b3SAdam Hornáček @lockCookie int 1370*eeb7e5b3SAdam HornáčekAS 1371*eeb7e5b3SAdam HornáčekDECLARE @retry INT = 10; 1372*eeb7e5b3SAdam Hornáček 1373*eeb7e5b3SAdam Hornáček WHILE (@retry > 0) 1374*eeb7e5b3SAdam Hornáček BEGIN 1375*eeb7e5b3SAdam Hornáček BEGIN TRY 1376*eeb7e5b3SAdam Hornáček BEGIN TRANSACTION; 1377*eeb7e5b3SAdam Hornáček UPDATE ASPStateTempSessions 1378*eeb7e5b3SAdam Hornáček SET Expires = DATEADD(n, @timeout, GETUTCDATE()), 1379*eeb7e5b3SAdam Hornáček SessionItemShort = @itemShort, 1380*eeb7e5b3SAdam Hornáček SessionItemLong = NULL, 1381*eeb7e5b3SAdam Hornáček Timeout = @timeout, 1382*eeb7e5b3SAdam Hornáček Locked = 0 1383*eeb7e5b3SAdam Hornáček WHERE SessionId = @id AND LockCookie = @lockCookie 1384*eeb7e5b3SAdam Hornáček COMMIT TRANSACTION; 1385*eeb7e5b3SAdam Hornáček SET @retry = 0; -- //Stops the loop. 1386*eeb7e5b3SAdam Hornáček END TRY 1387*eeb7e5b3SAdam Hornáček 1388*eeb7e5b3SAdam Hornáček BEGIN CATCH 1389*eeb7e5b3SAdam Hornáček SET @retry -= 1; 1390*eeb7e5b3SAdam Hornáček 1391*eeb7e5b3SAdam Hornáček IF (@retry > 0 AND 1392*eeb7e5b3SAdam Hornáček ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205) 1393*eeb7e5b3SAdam Hornáček ) 1394*eeb7e5b3SAdam Hornáček BEGIN 1395*eeb7e5b3SAdam Hornáček IF XACT_STATE() = -1 1396*eeb7e5b3SAdam Hornáček ROLLBACK TRANSACTION; 1397*eeb7e5b3SAdam Hornáček 1398*eeb7e5b3SAdam Hornáček WAITFOR DELAY '00:00:00.001'; 1399*eeb7e5b3SAdam Hornáček END 1400*eeb7e5b3SAdam Hornáček ELSE 1401*eeb7e5b3SAdam Hornáček BEGIN 1402*eeb7e5b3SAdam Hornáček PRINT 'Suffered an error for which Retry is inappropriate.'; 1403*eeb7e5b3SAdam Hornáček THROW; 1404*eeb7e5b3SAdam Hornáček END 1405*eeb7e5b3SAdam Hornáček END CATCH 1406*eeb7e5b3SAdam Hornáček 1407*eeb7e5b3SAdam Hornáček END -- //While loop 1408*eeb7e5b3SAdam Hornáček 1409*eeb7e5b3SAdam Hornáček RETURN 0 1410*eeb7e5b3SAdam HornáčekGO 1411*eeb7e5b3SAdam Hornáček/*http://example.com.*/ 1412*eeb7e5b3SAdam Hornáček/* comment /* comment */ 1413*eeb7e5b3SAdam Hornáčekcomment 1414*eeb7e5b3SAdam Hornáček*/ 1415