56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
 | 
						|
/****** Object:  StoredProcedure [updateSession] ******/
 | 
						|
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[updateSession]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
 | 
						|
    DROP PROCEDURE [updateSession];
 | 
						|
GO
 | 
						|
	
 | 
						|
CREATE PROCEDURE [dbo].[updateSession]
 | 
						|
 | 
						|
(
 | 
						|
	@SessionID int,
 | 
						|
	@UserID nvarchar(100),
 | 
						|
	@DTSDtart datetime,
 | 
						|
	@DTSEnd datetime=null,
 | 
						|
	@DTSActivity datetime,
 | 
						|
	@LastChanged timestamp,
 | 
						|
	@MachineName nvarchar(100),
 | 
						|
	@ProcessID int,
 | 
						|
	@newLastChanged timestamp output
 | 
						|
)
 | 
						|
WITH EXECUTE AS OWNER
 | 
						|
AS
 | 
						|
BEGIN TRY -- Try Block
 | 
						|
	BEGIN TRANSACTION
 | 
						|
	UPDATE [Sessions]
 | 
						|
		SET
 | 
						|
			[UserID]=@UserID,
 | 
						|
			[DTSDtart]=@DTSDtart,
 | 
						|
			[DTSEnd]=@DTSEnd,
 | 
						|
			[DTSActivity]=@DTSActivity,
 | 
						|
			[MachineName]=@MachineName,
 | 
						|
			[ProcessID]=@ProcessID
 | 
						|
		WHERE [SessionID]=@SessionID AND [LastChanged]=@LastChanged
 | 
						|
	IF @@ROWCOUNT = 0
 | 
						|
	BEGIN
 | 
						|
		IF NOT exists(select * from [Sessions] WHERE [SessionID]=@SessionID)
 | 
						|
			RAISERROR('Session record has been deleted by another user', 16, 1)
 | 
						|
		ELSE           	
 | 
						|
			RAISERROR('Session has been edited by another user', 16, 1)            	
 | 
						|
	END
 | 
						|
 | 
						|
		SELECT 		@newLastChanged=[LastChanged]	
 | 
						|
		FROM [Sessions] WHERE [SessionID]=@SessionID		
 | 
						|
 | 
						|
	IF( @@TRANCOUNT > 0 ) COMMIT
 | 
						|
END TRY
 | 
						|
BEGIN CATCH -- Catch Block
 | 
						|
	IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level
 | 
						|
 	ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit.  Top level will rollback
 | 
						|
	EXEC vlnErrorHandler
 | 
						|
END CATCH
 | 
						|
GO
 | 
						|
-- Display the status of Proc creation
 | 
						|
IF (@@Error = 0) PRINT 'Procedure Creation: updateSession Succeeded'
 | 
						|
ELSE PRINT 'Procedure Creation: updateSession Error on Creation'
 | 
						|
GO
 |