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

Popular posts from this blog

Using sp_executesql with OPENQUERY

Executing Remote Queries Safely and Efficiently with sp_executesql