92 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
USE [VEPROMS]
 | 
						||
GO
 | 
						||
/****** Object:  StoredProcedure [dbo].[addItemSiblingBefore]    Script Date: 01/25/2010 09:38:28 ******/
 | 
						||
SET ANSI_NULLS ON
 | 
						||
GO
 | 
						||
SET QUOTED_IDENTIFIER ON
 | 
						||
GO
 | 
						||
	
 | 
						||
ALTER PROCEDURE [dbo].[addItemSiblingBefore]
 | 
						||
(
 | 
						||
	@ItemID int=null,	@Number nvarchar(30)=null,	@Text nvarchar(MAX)=null,	@FormatID int=null,	@Config nvarchar(MAX)=null,
 | 
						||
	@Type int=null, @DTS datetime,	@UserID nvarchar(100), @newItemID int output
 | 
						||
)
 | 
						||
WITH EXECUTE AS OWNER
 | 
						||
AS
 | 
						||
BEGIN TRY -- Try Block
 | 
						||
	BEGIN TRANSACTION
 | 
						||
	DECLARE @PreviousID int, @ContentID int,	@newLastChanged timestamp, @NewType int
 | 
						||
  SELECT @PreviousID = [PreviousID], @NewType=ISNULL(@Type,[Type])
 | 
						||
		FROM [ITEMS] II
 | 
						||
		JOIN [CONTENTS] CC ON CC.[ContentID]=II.[CONTENTID]
 | 
						||
		WHERE [ItemID]=@ItemID
 | 
						||
	EXECUTE AddContent @Number, @Text, @NewType, @FormatID, @Config, @DTS, @UserID, @ContentID output, @newLastChanged output
 | 
						||
	EXECUTE AddItem @PreviousID, @ContentID,	@DTS,	@UserID ,	@newItemID output,	@newLastChanged output
 | 
						||
  UPDATE [ITEMS] SET [PreviousID]=@newItemID where [ItemID]=@ItemID -- Should be UpdateItem
 | 
						||
  UPDATE [PARTS] SET [ItemID]=@newItemID where [ItemID]=@ItemID -- Should be UpdatePart
 | 
						||
  IF @PreviousID is null -- The step is replacing the first step
 | 
						||
  BEGIN
 | 
						||
		-- Update content records for the transitions
 | 
						||
		Update CC
 | 
						||
			Set Text = DBO.vefn_FixTransitionText(Text,TT.TransitionID,TT.TranType,TT.ToID,TT.RangeID,@ItemID,@newItemID)
 | 
						||
		From CONTENTS CC
 | 
						||
			JOIN Transitions TT ON TT.FromID = CC.ContentID
 | 
						||
			WHERE TT.ToID = @ItemID OR TT.RangeID = @ItemID
 | 
						||
		-- Update transitions that pointed to @ItemID to point to @newItemID
 | 
						||
		Update TRANSITIONS
 | 
						||
			Set ToID = CASE ToID WHEN @ItemID THEN @newItemID ELSE ToID END,
 | 
						||
				RangeID = CASE RangeID WHEN @ItemID THEN @newItemID ELSE RangeID END
 | 
						||
				WHERE ToID = @ItemID OR RangeID = @ItemID
 | 
						||
  END
 | 
						||
  ELSE -- Check for Transitions that point to the Next Step
 | 
						||
  BEGIN
 | 
						||
		-- Get a list of Transitions which need to change children of @ItemID that point to @NextID
 | 
						||
		DECLARE @NextStepTransitions TABLE
 | 
						||
		(
 | 
						||
			[TransitionID] int PRIMARY KEY,
 | 
						||
			[FromID] [int],
 | 
						||
			[ToID] [int],
 | 
						||
			[RangeID] [int],
 | 
						||
			[TranType] [int],
 | 
						||
			[Config] [nvarchar](max)
 | 
						||
		)
 | 
						||
		Insert into @NextStepTransitions select * from vefn_NextStepTransitions(@ItemID,@PreviousID)
 | 
						||
		IF (SELECT COUNT(*) from @NextStepTransitions) > 0 -- Next Step Transitions
 | 
						||
		BEGIN
 | 
						||
			-- Update all transitions in the list to point to @newItemID
 | 
						||
			Update TT
 | 
						||
				Set TT.ToID = CASE TT.ToID WHEN @ItemID THEN @newItemID ELSE TT.ToID END,
 | 
						||
					TT.RangeID = CASE TT.RangeID WHEN @ItemID THEN @newItemID ELSE TT.RangeID END
 | 
						||
			From TRANSITIONS TT
 | 
						||
				JOIN @NextStepTransitions NS ON NS.TransitionID = TT.TransitionID
 | 
						||
			-- Update content records for the transitions
 | 
						||
			Update CC
 | 
						||
				Set Text = DBO.vefn_FixTransitionText(Text,NS.TransitionID,NS.TranType,NS.ToID,NS.RangeID,@ItemID,@newItemID)
 | 
						||
			From CONTENTS CC
 | 
						||
				JOIN @NextStepTransitions NS ON NS.FromID = CC.ContentID
 | 
						||
		END
 | 
						||
	END
 | 
						||
  -- Add 'Verification Required' AnnotationType
 | 
						||
	DECLARE @typeID int
 | 
						||
	SELECT @typeID = TypeID from AnnotationTypes where Name = 'Verification Required'
 | 
						||
	IF(@typeID IS NULL)
 | 
						||
	BEGIN
 | 
						||
		INSERT INTO [AnnotationTypes]	([Name],[UserID])	VALUES	('Verification Required','Volian')
 | 
						||
		SELECT @typeID = SCOPE_IDENTITY()
 | 
						||
	END
 | 
						||
  -- Add "Verification Required" Annotation for each Transition that points to @newItemID or @NextID
 | 
						||
	INSERT INTO [Annotations] ([ItemID],[TypeID],[SearchText],[UserID])
 | 
						||
		SELECT ItemID, @typeID,'Verify Transition Destination',@UserID
 | 
						||
		FROM Items where CONTENTID in (SELECT FromID FROM TRANSITIONS
 | 
						||
		where ToID IN(@ItemID,@newItemID) OR RangeID IN(@ItemID,@newItemID))
 | 
						||
  -- Transition Text gets updated in ItemInsertExt.cs
 | 
						||
	IF( @@TRANCOUNT > 0 ) COMMIT
 | 
						||
  PRINT 'Sibling Added Before ' + ltrim(str(@newItemID))
 | 
						||
	EXECUTE GetItem @newItemID
 | 
						||
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
 |