Saturday, 21 December 2013

Sql Various Testing (Procedure,Cursor)

CREATE Procedure [damsdata].[sp_AutoImport_Final]                  
as                     
begin                     
Declare @FCode varchar(20),       
@Main_Table varchar(50),       
@Temp_Table varchar(50),       
@FromDate varchar(50),       
@ToDate varchar(50),       
@Offline_Sync_Date varchar(50),       
@DateRange varchar(50),       
@Condition varchar(50),       
@ChildTable int,       
@RelatedTab_Name varchar(50),       
@RelatedTab_TempName varchar(50),       
@Related_Condition varchar(50),       
@ChildID varchar(max),       
@nsql NVARCHAR(max),       
@Data int,       
@parm1 int,       
@SyncType varchar(20),   
@Parent_Columns NVARCHAR(max),   
@Child_Columns NVARCHAR(max), 
@Related_Column_Id varchar(MAX)       
set @SyncType='Auto'      
if OBJECT_ID('tempdb..#Upload_Status') is not null       
drop table #Upload_Status       
select * into #Upload_Status from DataImport where WebUpdate=0      
       
set @FromDate=(select CONVERT(VARCHAR(30),FromDate,101)from DataImport)       
set @ToDate=(select CONVERT(VARCHAR(30),ToDate,101) from DataImport)       
set @Offline_Sync_Date=(select CONVERT(VARCHAR(30),AsOnDate,101) from DataImport)       
       
Declare C1 Cursor for select FranchiseCode from #Upload_Status       
open C1       
fetch next from C1 into @FCode       
while(@@FETCH_STATUS=0)       
begin       
       
Declare InnerCursor Cursor for select Main_Table,Temp_Table,DateRange_Column,Condition_Column,Has_Child_Table,Related_Table,Related_Temp_Table,Related_Column,Parent_Columns,Child_Columns from DataMapping       
open InnerCursor       
fetch next FROM InnerCursor into @Main_Table,@Temp_Table,@DateRange,@Condition,@ChildTable,@RelatedTab_Name,@RelatedTab_TempName,@Related_Condition,@Parent_Columns,@Child_Columns       
while(@@FETCH_STATUS=0)       
begin       
declare @Sqlstr varchar(MAX),       
@ChildSqlstr varchar(MAX),       
@InnerChildSqlstr varchar(MAX),       
@SyncReport varchar(max)       
--check the data within the date range in temp table.       
--If Exist then delete the records from Main table and insert records from temp table to main table       
if(@DateRange='No')       
begin       
set @nsql='select @parm1 = COUNT(*)from '+@Temp_Table+' where '+@Condition+' in ('''+@FCode+''')'        
end       
else       
begin       
set @nsql='select @parm1 = COUNT(*)from '+@Temp_Table+' where '+@Condition+' in ('''+@FCode+''') and '+@DateRange+' between '''+@FromDate+''' and '''+@ToDate+''''        
end       
exec sp_executesql @nsql, @params = N'@parm1 int OUTPUT', @parm1 = @parm1 OUTPUT        
set @Data=(SELECT @parm1 AS newCount)       
if(@Data>0)       
       
begin       
       
if(@ChildTable>0)--Check Wheather the Table has some Related Table with it.       
begin       
if OBJECT_ID('tempdb..#GetDataFromMainTable') is not null       
drop table #GetDataFromMainTable     
create table #GetDataFromMainTable (entryNo varchar(max))       
     
--set @ChildSqlstr='select '+@Related_Condition+' into #GetDataFromMainTable from '+@Temp_Table+' where '+@Condition+' in ('''+@FCode+''') and '+@DateRange+' between '''+@FromDate+''' and '''+@ToDate+''''        
--exec(@ChildSqlstr)     
--Select all foreign key Id into temp table   
set  @Related_Column_Id=''    
INSERT INTO #GetDataFromMainTable EXEC('exec sp_childParent '+@Temp_Table+','+@Related_Condition+','+@Condition+','+@FCode+','+@DateRange+','''+@FromDate+''','''+@ToDate+'''')     
 
SELECT @Related_Column_Id = @Related_Column_Id + CONVERT(varchar, entryNo) + ','  
FROM #GetDataFromMainTable 
SET @Related_Column_Id=(SELECT LEFT(@Related_Column_Id, LEN(@Related_Column_Id) - 1)) 
--Print @Related_Column_Id 
 
--declare innerChildCursor cursor for select * from #GetDataFromMainTable       
--open innerChildCursor       
--fetch next from innerChildCursor into @ChildID       
--while(@@FETCH_STATUS=0)       
--begin       
--Based on the Id delete from Child Table and then select from TEMP child table and then insert into Child Table       
set @InnerChildSqlstr='Delete from '+@RelatedTab_Name+' where '+@Related_Condition+' in ('+@Related_Column_Id+')'       
set @InnerChildSqlstr='insert into '+@RelatedTab_Name+' ('+@Child_Columns+' ) select * from  '+@RelatedTab_TempName+' where '+@Related_Condition+' in ('+@Related_Column_Id+')'       
exec(@InnerChildSqlstr)      
print @InnerChildSqlstr     
-- print @RelatedTab_TempName     
-- print @Related_Condition     
-- print @ChildID     
--fetch next from innerChildCursor into @ChildID       
--end       
--CLOSE innerChildCursor       
--DEALLOCATE innerChildCursor       
        
        
end       
if(@DateRange='No')       
begin               
SET @Sqlstr='Delete from '+@Main_Table+' where '+@Condition+' in ('''+@FCode+''');'                       
end       
else       
begin       
SET @Sqlstr='Delete from '+@Main_Table+' where '+@Condition+' in ('''+@FCode+''') and '+@DateRange+' between '''+@FromDate+''' and '''+@ToDate+''';'                       
end       
set @Sqlstr=@Sqlstr+'Insert into '+@Main_Table+' ('+@Parent_Columns+' ) select * from '+@Temp_Table+' where '+@Condition+' in ('''+@FCode+''');'                   
print @Sqlstr   
exec(@Sqlstr)       
       
end       
fetch next FROM InnerCursor into @Main_Table,@Temp_Table,@DateRange,@Condition,@ChildTable,@RelatedTab_Name,@RelatedTab_TempName,@Related_Condition,@Parent_Columns,@Child_Columns       
end       
close InnerCursor       
deallocate InnerCursor       
       
set @SyncReport='Insert into tbl_SyncTrack values ('''+@FCode+''',GETDATE(),'''+@SyncType+''','''+@FromDate+''','''+@ToDate+''','''+@Offline_Sync_Date+''')'       
exec(@SyncReport)       
fetch next from C1 into @FCode       
end       
close C1       
deallocate C1           
end         

No comments:

Post a Comment