Prepare for Staging Using Dynamic SQL
Prepare for staging and refresh of target table. Staging table name is TARGET table name with _STAGING Appended. TRUNCATE the staging table. Get the MAX DATE LOADED from the TARGET table
Workflow:
- PREP FOR STAGING
- LOAD STAGING FROM SOURCE
- MERGE TARGET FROM SOURCE
/*
DECLARE @MAX_DATE_LOADED DATETIME;
EXEC [dbo].[PREP_FOR_STAGING]
@P_TABLE_SCHEMA = 'dbo'
, @P_TABLE_NAME = 'TABLE_NAME'
, @P_MAX_DATE_LOADED_OUT = @MAX_DATE_LOADED OUTPUT;
SELECT @MAX_DATE_LOADED;
*/
CREATE PROCEDURE [ETL].[PREP_FOR_STAGING]
@P_TABLE_SCHEMA NVARCHAR(50)
, @P_TABLE_NAME NVARCHAR(50)
, @P_MAX_DATE_LOADED_OUT DATETIME OUTPUT
AS
BEGIN
DECLARE
@MAX_DATE_LOADED DATETIME = CONVERT(DATE, GETDATE())
, @SQL NVARCHAR(4000);
-- truncate the staging table
SET @SQL = CONCAT(
N'TRUNCATE TABLE '
, @P_TABLE_SCHEMA
, N'.'
, @P_TABLE_NAME
, N'_STAGING'
);
EXEC sp_executesql @SQL;
-- get the MAX([DATE_LOADED]) from the target table
SET @SQL = CONCAT(
N'SELECT @MAX_DATE_LOADED_OUT = MAX([DATE_LOADED]) '
, N'FROM '
, @P_TABLE_SCHEMA
, N'.'
, @P_TABLE_NAME
);
EXEC sp_executesql
@SQL
, N'@MAX_DATE_LOADED_OUT DATETIME OUTPUT'
, @MAX_DATE_LOADED_OUT = @MAX_DATE_LOADED OUTPUT;
-- Handle edge case where @LAST_MODIFIED IS NULL;
-- this will happen if the table is empty or [DATE_LOADED] is
-- actually NULL in every row
SET @P_MAX_DATE_LOADED_OUT =
IIF(@MAX_DATE_LOADED IS NOT NULL
, @MAX_DATE_LOADED
, CONVERT(DATETIME, CONVERT(DATE, DATEADD(year, -5, GETDATE())))
);
END
GO
Comments
Post a Comment