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
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