Partial Request Rejection Script

Run this script to create the stored procedure webRequest_Submit_ParentRequestRejectedRecordsIns.

 
CREATE PROCEDURE [dbo].[webRequest_Submit_ParentRequestRejectedRecordsIns] @RequestID INT, @ParentRequestID INT, @ScenarioID UNIQUEIDENTIFIER
AS
BEGIN
	
SET NOCOUNT ON;

DECLARE @ParentScenario UNIQUEIDENTIFIER,
		@GetRecordsRequestID INT,
		@PageCount INT,
		@LC INT,
		@BaseTableName NVARCHAR(50),
		@SQL NVARCHAR(max),
		@DataBase NVARCHAR(50),
		@WebAppID UNIQUEIDENTIFIER,
		@strSql NVARCHAR(max),
		@strSql2 NVARCHAR(max),
		@strFields NVARCHAR(max)

DECLARE @PageTable Table (  ID INT IDENTITY(1,1),
							      TableName NVARCHAR(50))

SELECT @ParentScenario = ScenarioID FROM ttRequest WHERE RequestID=@ParentRequestID

SELECT @WebAppID=WebAppID FROM DGE..ttRequest WHERE RequestID=@RequestID

SELECT @DataBase= [Database] FROM DGE..webCategory_DatabaseSel WHERE WebAppID=@WebAppID

--Only begin insertion If current request is recursive request
IF (@RequestID<>@ParentRequestID AND @ScenarioID=@ParentScenario)
BEGIN

	SELECT  @GetRecordsRequestID = MAX(RequestID) FROM DGE..ttRequest WHERE ParentRequestID=@ParentRequestID AND @ScenarioID=@ParentScenario AND RequestID<>@RequestID

	--select All table names used in current request
	INSERT INTO @PageTable
	SELECT DISTINCT [Table] FROM CranSoft.dbo.[Page]
	WHERE PageID  IN (	SELECT DISTINCT PageID FROM DGE..ttTaskPage WHERE TaskID IN (
						SELECT DISTINCT SRT.TaskID FROM DGE..ttScenarioRoleTask SRT INNER JOIN DGE..ttTask T ON SRT.TaskID=T.TaskID 
						WHERE ScenarioID=@ScenarioID AND ActiveInScenarioRole=1 AND T.[Type]='Application' ))

	SELECT @PageCount = Count([TableName]) FROM @PageTable

	SET @LC=1
	While @LC <=@PageCount
	BEGIN
		
		SELECT @BaseTableName = TableName FROM @PageTable WHERE ID = @LC
		
		--If rejected column does not esixt in table then skip
		IF NOT EXISTS(SELECT 1 FROM sysobjects INNER JOIN syscolumns ON sysobjects.id = syscolumns.id
			WHERE sysobjects.name = @BaseTableName and  syscolumns.name = 'Rejected' )
		BEGIN
		  SET @LC+=1
		  CONTINUE
		END
		
		--To prevent duplication of records in request
		SET @SQL = 'DELETE FROM '+ @BaseTableName + ' Where RequestID = '+ CONVERT(NVARCHAR, @RequestID)
		EXECUTE DGE..webExecuteSQL
		@SQL,
		@DataBase
		SET @SQL=NULL
		
		--Create temp Table
		SET @SQL = 'Select * INTO ##TempTable'+CONVERT(NVARCHAR,@LC)+' FROM '+ @BaseTableName + ' Where RequestID = ' + CONVERT(NVARCHAR, @GetRecordsRequestID) + ' AND Rejected = 1'
		EXECUTE DGE..webExecuteSQL
		@SQL,
		@DataBase
		
		SET @SQL=NULL

		--Update RequestID in temp table
		SET @SQL ='UPDATE ##TempTable'+CONVERT(NVARCHAR,@LC)+' SET RequestID = ' + CONVERT(NVARCHAR,@RequestID)
		EXECUTE DGE..webExecuteSQL
		@SQL,
		@DataBase

		SET @SQL=NULL

		----Insert records into base table
		-------------------------------------
		DECLARE curFieldHolder CURSOR FOR
            -- Select all fields from the intersection of database objects 
         SELECT dbo.syscolumns.name
            FROM   dbo.sysobjects
                   INNER JOIN dbo.syscolumns
                           ON dbo.sysobjects.id = dbo.syscolumns.id
            WHERE  ( dbo.syscolumns.name IN (SELECT dbo.syscolumns.name
                                             FROM   dbo.sysobjects
                                                    INNER JOIN dbo.syscolumns
                                                            ON dbo.sysobjects.id = dbo.syscolumns.id
                                             WHERE  ( dbo.sysobjects.name = @BaseTableName )
                                                     AND dbo.syscolumns.name NOT IN (SELECT [Column] FROM CranSoft.dbo.ReservedColumn WHERE [Column] NOT IN ('AddedOn', 'AddedBy') 
							UNION ALL SELECT 'ID' UNION ALL SELECT 'Rejected' UNION ALL SELECT 'RejectionReason')))
                     AND ( dbo.sysobjects.name = @BaseTableName ) 
					 
          DECLARE @ColumnName1 sysname

          -- Loop through the cursor and update all fields in the first object with corresponding fields in the second object 
          OPEN curFieldHolder

          FETCH curFieldHolder INTO @ColumnName1

          SELECT @strFields = ''

          WHILE ( @@FETCH_STATUS = 0 )
            BEGIN
                -- Execute the SQL updates 
                SELECT @strFields = @strFields + '[' + @ColumnName1 + ']'

                FETCH curFieldHolder INTO @ColumnName1

                IF ( @@FETCH_STATUS = 0 )
                  BEGIN
                      SELECT @strFields = @strFields + ', '
                  END
            END

          CLOSE curFieldHolder

          DEALLOCATE curFieldHolder

          SET @strSql = 'INSERT INTO dbo.' + @BaseTableName
                        + ' ('+ @strFields
                        + ') '
          SET @strSql2 = 'SELECT ' + @strFields + 
                         + ' FROM ##TempTable'+CONVERT(NVARCHAR,@LC)
                         + ' WHERE (RequestID = '
                         + CONVERT(NVARCHAR(20), @RequestID) + ')'

          EXEC(@strSql + @strSql2)
		-------------------------------------
		--Drop temp table
		SET @SQL= 'DROP TABLE IF EXISTS ##TempTable'+CONVERT(NVARCHAR,@LC)
		EXECUTE DGE..webExecuteSQL
		@SQL,
		@DataBase

		SET @LC+=1
	END

END
END
GO