Skip to content

Commit fb075cc

Browse files
committed
Update omd.TableCondensing.sql
1 parent 9311e14 commit fb075cc

File tree

1 file changed

+76
-76
lines changed

1 file changed

+76
-76
lines changed

Direct_Framework/Stored Procedures/omd.TableCondensing.sql

Lines changed: 76 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -80,74 +80,76 @@ BEGIN TRY
8080
* Start of main process
8181
******************************************************************************/
8282

83+
SET @LogMessage = 'Start of main process';
84+
SET @MessageLog = [omd].[AddLogMessage](DEFAULT, DEFAULT, N'Status Update', @LogMessage, @MessageLog)
85+
8386
-- Local procedure variables
84-
DECLARE @ColumnList VARCHAR(MAX)
87+
DECLARE @ColumnListDynamicSQL NVARCHAR(MAX);
88+
DECLARE @ColumnList VARCHAR(MAX);
89+
DECLARE @KeyListDynamicSQL NVARCHAR(MAX);
8590
DECLARE @KeyList VARCHAR(MAX);
8691

8792
-- Create a list of columns that need to be taken into evaluation for condensing (checksum)
88-
SELECT @ColumnList =
89-
''''+
90-
STUFF
91-
(
92-
(
93-
SELECT DISTINCT ', ' + COLUMN_NAME
94-
FROM INFORMATION_SCHEMA.COLUMNS
95-
WHERE
96-
TABLE_NAME = @Table AND
97-
TABLE_SCHEMA = @SchemaName AND
98-
COLUMN_NAME NOT IN
99-
(
100-
'OMD_EVENT_DATETIME',
101-
'OMD_INSERT_DATETIME',
102-
'OMD_INSERT_MODULE_INSTANCE_ID',
103-
'OMD_SOURCE_ROW_ID',
104-
'OMD_HASH_FULL_RECORD',
105-
'OMD_CHANGE_KEY',
106-
'OMD_CHANGE_DATETIME'
107-
)
108-
FOR XML PATH('')
109-
),
110-
1,
111-
1,
112-
''
113-
)
114-
+ ''''
93+
SET @ColumnListDynamicSQL = N'
94+
SELECT @ColumnListOUT =
95+
STUFF(
96+
(
97+
SELECT DISTINCT '', '' + QUOTENAME(COLUMN_NAME)
98+
FROM ' + QUOTENAME(@DatabaseName) + N'.INFORMATION_SCHEMA.COLUMNS
99+
WHERE TABLE_NAME = @Table AND TABLE_SCHEMA = @SchemaName
100+
AND COLUMN_NAME NOT IN
101+
(
102+
''OMD_EVENT_DATETIME'',
103+
''SOURCE_TIMESTAMP'',
104+
''OMD_INSERT_DATETIME'',
105+
''INSCRIPTION_TIMESTAMP'',
106+
''OMD_INSERT_MODULE_INSTANCE_ID'',
107+
''AUDIT_TRAIL_ID'',
108+
''OMD_SOURCE_ROW_ID'',
109+
''INSCRIPTION_RECORD_ID'',
110+
''OMD_HASH_FULL_RECORD'',
111+
''CHECKSUM'',
112+
''OMD_CHANGE_KEY'',
113+
''OMD_CHANGE_DATETIME'',
114+
''CHANGE_DATA_INDICATOR''
115+
)
116+
FOR XML PATH(''''), TYPE).value(''text()[1]'', ''NVARCHAR(MAX)'')
117+
, 1, 2, ''''
118+
)';
119+
120+
EXEC sp_executesql
121+
@ColumnListDynamicSQL,
122+
N'@Table NVARCHAR(128), @SchemaName NVARCHAR(128), @ColumnListOUT NVARCHAR(MAX) OUTPUT',
123+
@Table, @SchemaName, @ColumnList OUTPUT;
115124

116125
SELECT @ColumnList = LTRIM(RTRIM(@ColumnList));
117126

118-
IF @Debug = 'Y'
119-
BEGIN
120-
PRINT 'Column list = ' + @ColumnList
121-
END
127+
SET @LogMessage = @ColumnList;
128+
SET @MessageLog = [omd].[AddLogMessage](DEFAULT, DEFAULT, N'Column List', @LogMessage, @MessageLog)
122129

123130
-- Create a list of keys for use in the window functions and joins
124-
SELECT @KeyList =
125-
''''+
126-
STUFF
127-
(
128-
(
129-
SELECT DISTINCT ', ' + COLUMN_NAME
130-
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
131-
INNER JOIN
132-
INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU
133-
ON TC.CONSTRAINT_TYPE = 'PRIMARY KEY' AND
134-
TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME AND
135-
KU.TABLE_NAME=@Table
136-
WHERE COLUMN_NAME NOT LIKE 'OMD_%'
137-
FOR XML PATH('')
138-
),
139-
1,
140-
1,
141-
''
142-
)
143-
+ ''''
144-
145-
SELECT @KeyList = REPLACE(LTRIM(RTRIM(@KeyList)),'''','');
146-
147-
IF @Debug = 'Y'
148-
BEGIN
149-
PRINT 'Key list = ' + @KeyList;
150-
END
131+
SET @KeyListDynamicSQL = N'
132+
SELECT @KeyList_OUT =
133+
STRING_AGG(COLUMN_NAME, '','')
134+
FROM ' + QUOTENAME(@DatabaseName) + N'.INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
135+
INNER JOIN ' + QUOTENAME(@DatabaseName) + N'.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU
136+
ON TC.CONSTRAINT_TYPE = ''PRIMARY KEY''
137+
AND TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME
138+
AND KU.TABLE_NAME = @Table_IN
139+
WHERE COLUMN_NAME NOT LIKE ''OMD_%'';'; -- Must exclude time component e.g. OMD_INSERT_DATETIME. For improvement.
140+
141+
-- Execute dynamic SQL
142+
EXEC sp_executesql
143+
@KeyListDynamicSQL,
144+
N'@Table_IN NVARCHAR(128), @KeyList_OUT NVARCHAR(MAX) OUTPUT',
145+
@Table_IN = @Table,
146+
@KeyList_OUT = @KeyList OUTPUT;
147+
148+
-- Trim spaces if needed
149+
SET @KeyList = LTRIM(RTRIM(@KeyList));
150+
151+
SET @LogMessage = @KeyList;
152+
SET @MessageLog = [omd].[AddLogMessage](DEFAULT, DEFAULT, N'Key List', @LogMessage, @MessageLog)
151153

152154
-- Translating back
153155
DECLARE @HashSnippet VARCHAR(MAX);
@@ -205,40 +207,38 @@ BEGIN TRY
205207

206208
SET @HashSnippet = LEFT(@HashSnippet,DATALENGTH(@HashSnippet)-2)+CHAR(10);
207209

208-
IF @Debug = 'Y'
209-
BEGIN
210-
PRINT @HashSnippet
211-
END
210+
SET @LogMessage = @HashSnippet;
211+
SET @MessageLog = [omd].[AddLogMessage](DEFAULT, DEFAULT, N'Hash snippet', @LogMessage, @MessageLog)
212212

213213
-- Build the dynamic SQL
214214
DECLARE @FinalQuery NVARCHAR(MAX);
215215

216216
SET @FinalQuery = 'WITH CondensingCTE AS' + CHAR(10);
217217
SET @FinalQuery = @FinalQuery + '(' + CHAR(10);
218218
SET @FinalQuery = @FinalQuery + 'SELECT' + CHAR(10);
219-
SET @FinalQuery = @FinalQuery + ' HASHBYTES(''SHA2_512'',' + CHAR(10);
219+
SET @FinalQuery = @FinalQuery + ' HASHBYTES(''MD5'',' + CHAR(10);
220220
SET @FinalQuery = @FinalQuery + @HashSnippet;
221-
SET @FinalQuery = @FinalQuery + ' ) AS FULL_ROW_CHECKSUM,' + CHAR(10);
221+
SET @FinalQuery = @FinalQuery + ' ) AS [TMP_CHECKSUM],' + CHAR(10);
222222
SET @FinalQuery = @FinalQuery + ' *' + CHAR(10);
223-
SET @FinalQuery = @FinalQuery + 'FROM ' + @DatabaseName + '.' + @SchemaName + '.' + @Table+CHAR(10);
223+
SET @FinalQuery = @FinalQuery + 'FROM [' + @DatabaseName + '].' + @SchemaName + '.' + @Table+CHAR(10);
224224
SET @FinalQuery = @FinalQuery + '), Subselect AS' + CHAR(10);
225225
SET @FinalQuery = @FinalQuery + '(' + CHAR(10);
226226
SET @FinalQuery = @FinalQuery + 'SELECT' + CHAR(10);
227-
SET @FinalQuery = @FinalQuery + ' OMD_CHANGE_KEY,' + CHAR(10);
228-
SET @FinalQuery = @FinalQuery + ' FULL_ROW_CHECKSUM,' + CHAR(10);
229-
SET @FinalQuery = @FinalQuery + ' LAG(FULL_ROW_CHECKSUM) OVER (PARTITION BY ' + @KeyList + ' ORDER BY OMD_CHANGE_KEY) AS NEXT_FULL_ROW_CHECKSUM' + CHAR(10);
227+
SET @FinalQuery = @FinalQuery + ' *,' + CHAR(10);
228+
SET @FinalQuery = @FinalQuery + ' LAG([TMP_CHECKSUM]) OVER (PARTITION BY ' + @KeyList + ' ORDER BY ' + @KeyList + ') AS [NEXT_CHECKSUM],' + CHAR(10);
229+
SET @FinalQuery = @FinalQuery + ' LAG([CHANGE_DATA_INDICATOR]) OVER (PARTITION BY ' + @KeyList + ' ORDER BY ' + @KeyList + ') AS [NEXT_CHANGE_DATA_INDICATOR]' + CHAR(10);
230230
SET @FinalQuery = @FinalQuery + 'FROM CondensingCTE' + CHAR(10);
231231
SET @FinalQuery = @FinalQuery + ')' + CHAR(10);
232232
SET @FinalQuery = @FinalQuery + 'DELETE FROM Subselect' + CHAR(10);
233-
SET @FinalQuery = @FinalQuery + 'WHERE FULL_ROW_CHECKSUM = NEXT_FULL_ROW_CHECKSUM' + CHAR(10);
233+
SET @FinalQuery = @FinalQuery + 'WHERE [TMP_CHECKSUM] = [NEXT_CHECKSUM]' + CHAR(10);
234+
SET @FinalQuery = @FinalQuery + 'AND [CHANGE_DATA_INDICATOR] = [NEXT_CHANGE_DATA_INDICATOR]' + CHAR(10);
234235

235236
-- Spool the resulting query
236-
IF @Debug = 'Y'
237-
BEGIN
238-
PRINT @FinalQuery
239-
END
237+
SET @LogMessage = @FinalQuery;
238+
SET @MessageLog = [omd].[AddLogMessage](DEFAULT, DEFAULT, N'Final query', @LogMessage, @MessageLog)
240239

241-
EXECUTE sp_executesql @FinalQuery;
240+
--EXECUTE sp_executesql @FinalQuery;
241+
PRINT @FinalQuery;
242242

243243
-- End of procedure label
244244
EndOfProcedure:
@@ -303,4 +303,4 @@ BEGIN CATCH
303303
@EventReturnCode = @EventReturnCode;
304304

305305
THROW
306-
END CATCH
306+
END CATCH

0 commit comments

Comments
 (0)