USP_ETL_BEGINLOAD
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CURRENTDATAWINDOWCLOSE | datetimeoffset | IN | |
@ISPARENT | bit | IN | |
@SSISPACKAGENAME | nvarchar(255) | IN | |
@SSISPACKAGEPATH | nvarchar(255) | IN | |
@SSISSTARTTIME | datetimeoffset | IN | |
@SSISUSERNAME | nvarchar(255) | IN | |
@SSISMACHINENAME | nvarchar(255) | IN | |
@SSISEXECUTIONINSTANCEGUID | uniqueidentifier | IN | |
@CLEAR_INCOMPLETE_LOADS | bit | IN |
Definition
Copy
CREATE procedure [BBDW].[USP_ETL_BEGINLOAD]
@CURRENTDATAWINDOWCLOSE datetimeoffset=NULL, --should be relative to the source system, use SELECT SYSDATETIMEOFFSET() from the source system.
--for child packages will use the DATAWINDOWCLOSE of the parent.
@ISPARENT bit,
@SSISPACKAGENAME nvarchar(255),
@SSISPACKAGEPATH nvarchar(255) ='',
@SSISSTARTTIME datetimeoffset =null,
@SSISUSERNAME nvarchar(255) ='',
@SSISMACHINENAME nvarchar(255) ='',
@SSISEXECUTIONINSTANCEGUID uniqueidentifier =null,
@CLEAR_INCOMPLETE_LOADS bit=1 --true to delete where LOADISCOMPLETE=0;
as
set nocount on;
declare @CURRENTDATAWINDOWOPEN datetimeoffset;
declare @ETLCONTROLID int;
declare @VALIDSTARTDATEDIMID int;
declare @VALIDENDDATEDIMID int;
begin try
declare @PARENTETLCONTROLID int;
if @ISPARENT =0
begin
select top 1 @PARENTETLCONTROLID = [ETLCONTROLID]
from BBDW.[ETLCONTROL] where [LOADISCOMPLETE] = 0 and [ISPARENT]=1 order by [DATAWINDOWCLOSE] desc, [ETLCONTROLID] desc;
if @PARENTETLCONTROLID is null
begin
raiserror('Unable to find an executing parent ETLCONTROLID', 16, 1);
return 68;
end
end
if (@CURRENTDATAWINDOWCLOSE IS NULL) AND (@ISPARENT=1)
begin
raiserror ('@CURRENTDATAWINDOWCLOSE cannot be NULL. Select GETDATE() from the source system and use that value for @CURRENTDATAWINDOWCLOSE', 16, 1);
return 70;
end
if (@CURRENTDATAWINDOWCLOSE IS NULL) AND (@ISPARENT = 0)
begin
select @CURRENTDATAWINDOWCLOSE = max([DATAWINDOWCLOSE])
from [ETLCONTROL]
where [ETLCONTROLID] = @PARENTETLCONTROLID
end
begin transaction;
if @CLEAR_INCOMPLETE_LOADS = 1 and (@ISPARENT=1)
delete from BBDW.[ETLCONTROL]
where [LOADISCOMPLETE] = 0;
select @CURRENTDATAWINDOWOPEN = max([DATAWINDOWCLOSE])
from BBDW.[ETLCONTROL]
where [LOADISCOMPLETE] = 1 and [SSISPACKAGENAME] = @SSISPACKAGENAME;
select
@VALIDSTARTDATEDIMID = min([DATEDIMID]),
@VALIDENDDATEDIMID = max([DATEDIMID])
from BBDW.[DIM_DATE]
where [DATEDIMID] > 0;
if @CURRENTDATAWINDOWOPEN is null
set @CURRENTDATAWINDOWOPEN='1776-07-04 00:00:00.0000000 +00:00'
-- Set load parameters - use the last load and the current datetime to determine load window
insert into BBDW.[ETLCONTROL](
[DATAWINDOWOPEN],
[DATAWINDOWCLOSE],
[LOADISCOMPLETE],
[ETLSTARTTIME],
[SSISPACKAGENAME],
[SSISPACKAGEPATH],
[SSISSTARTTIME],
[SSISUSERNAME],
[SSISMACHINENAME],
[PARENTETLCONTROLID],
[ISPARENT],
[SSISEXECUTIONINSTANCEGUID],
[NUMROWSADDED],
[NUMROWSUPDATED]
)
values(
@CURRENTDATAWINDOWOPEN,
@CURRENTDATAWINDOWCLOSE,
0,
SYSDATETIMEOFFSET(),
@SSISPACKAGENAME ,
@SSISPACKAGEPATH,
@SSISSTARTTIME ,
@SSISUSERNAME ,
@SSISMACHINENAME ,
@PARENTETLCONTROLID,
@ISPARENT,
@SSISEXECUTIONINSTANCEGUID,
0,
0
);
set @ETLCONTROLID = @@IDENTITY
commit transaction;
--RETURN a result set to avoid the SSIS parameter hassle.
select @ETLCONTROLID as [ETLCONTROLID],
cast(@CURRENTDATAWINDOWOPEN as datetime) as [DATAWINDOWOPEN],
cast(@CURRENTDATAWINDOWCLOSE as datetime) as [DATAWINDOWCLOSE],
@CURRENTDATAWINDOWOPEN as [DATAWINDOWOPEN_DATETIMEOFFSET],
@CURRENTDATAWINDOWCLOSE as [DATAWINDOWCLOSE_DATETIMEOFFSET],
@VALIDSTARTDATEDIMID as [VALIDSTARTDATEDIMID],
@VALIDENDDATEDIMID as [VALIDENDDATEDIMID];
end try
begin catch
if @@TRANCOUNT > 0 rollback transaction;
exec BBDW.USP_RAISE_ERROR;
raiserror('There was an error in procedure USP_ETL_BEGINLOAD while setting the load parameters.', 16, 1);
return 50;
end catch