sync
This commit is contained in:
88
gaia - create structure for consolidated change tracking.sql
Normal file
88
gaia - create structure for consolidated change tracking.sql
Normal file
@@ -0,0 +1,88 @@
|
||||
--create table to record state
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM [sys].[tables] AS [T]
|
||||
WHERE [T].[name] = 'change_tracking_state'
|
||||
)
|
||||
BEGIN
|
||||
--DROP TABLE [dbo].[change_tracking_state]
|
||||
CREATE TABLE [dbo].[change_tracking_state] (
|
||||
[pharmacy_schema] sysname NOT NULL,
|
||||
[table_name] sysname NOT NULL,
|
||||
[last_sync_version] BIGINT NOT NULL,
|
||||
CONSTRAINT PK_change_tracking_state PRIMARY KEY (
|
||||
[pharmacy_schema],
|
||||
[table_name]
|
||||
)
|
||||
);
|
||||
END;
|
||||
|
||||
--enable change tracking if missing
|
||||
IF NOT EXISTS (
|
||||
SELECT [d].[name],
|
||||
[ctd].[database_id],
|
||||
[ctd].[is_auto_cleanup_on],
|
||||
[ctd].[retention_period],
|
||||
[ctd].[retention_period_units],
|
||||
[ctd].[retention_period_units_desc],
|
||||
[ctd].[max_cleanup_version]
|
||||
FROM [sys].[change_tracking_databases] AS [ctd]
|
||||
JOIN [sys].[databases] AS [d] ON [d].[database_id] = [ctd].[database_id]
|
||||
WHERE [d].[name] = 'pharmacy'
|
||||
)
|
||||
BEGIN
|
||||
ALTER DATABASE [Pharmacy]
|
||||
SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 7 DAYS, AUTO_CLEANUP = ON);
|
||||
END;
|
||||
|
||||
--add tables to change tracking
|
||||
DECLARE @tpl_ct NVARCHAR(MAX)='ALTER TABLE [@schema@].[@table@] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON);
|
||||
'
|
||||
DECLARE @q NVARCHAR(MAX)='';
|
||||
|
||||
SELECT @q = @q + REPLACE(REPLACE(@tpl_ct,'@schema@', s.name),'@table@', t.name)
|
||||
FROM [sys].[tables] AS [t]
|
||||
JOIN [sys].[schemas] AS [s] ON [s].[schema_id] = [t].[schema_id]
|
||||
WHERE 1 = 1
|
||||
AND [s].[name] LIKE 'ama%'
|
||||
AND [t].[name] IN ( N'Account', N'Account_key', N'Account_link', N'Account_text', N'Accounting_turnover_agg',
|
||||
N'Address', N'Address_category', N'Address_category_text', N'Address_contact_person_list',
|
||||
N'Address_Criteria', N'Address_key', N'Batch_run', N'BVR_member', N'CRS_batch_run',
|
||||
N'CRS_document_header', N'DH_Criteria', N'Document_date', N'Document_error', N'Document_header',
|
||||
N'Entry', N'Entry_reconciliation', N'Financial_relation_account'
|
||||
)
|
||||
AND NOT EXISTS(
|
||||
SELECT 1
|
||||
FROM sys.change_tracking_tables ct
|
||||
WHERE OBJECT_SCHEMA_NAME(ct.object_id) = s.name
|
||||
AND OBJECT_NAME(ct.object_id) = t.name
|
||||
|
||||
)
|
||||
;
|
||||
|
||||
EXEC(@q);
|
||||
|
||||
--init change tracking
|
||||
INSERT INTO [dbo].[change_tracking_state] (
|
||||
[pharmacy_schema],
|
||||
[table_name],
|
||||
[last_sync_version]
|
||||
)
|
||||
SELECT [s].[name] AS [pharmacy_schema],
|
||||
[t].[name] AS [table_name],
|
||||
CHANGE_TRACKING_CURRENT_VERSION()
|
||||
FROM [sys].[tables] AS [t]
|
||||
JOIN [sys].[schemas] AS [s] ON [s].[schema_id] = [t].[schema_id]
|
||||
WHERE 1 = 1
|
||||
AND [s].[name] LIKE 'ama%'
|
||||
AND [t].[name] IN ( N'Account', N'Account_key', N'Account_link', N'Account_text', N'Accounting_turnover_agg',
|
||||
N'Address', N'Address_category', N'Address_category_text', N'Address_contact_person_list',
|
||||
N'Address_Criteria', N'Address_key', N'Batch_run', N'BVR_member', N'CRS_batch_run',
|
||||
N'CRS_document_header', N'DH_Criteria', N'Document_date', N'Document_error', N'Document_header',
|
||||
N'Entry', N'Entry_reconciliation', N'Financial_relation_account'
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[change_tracking_state] AS [cts]
|
||||
WHERE [cts].[pharmacy_schema] = [s].[name] AND [cts].[table_name] = [t].[name]
|
||||
);
|
||||
Reference in New Issue
Block a user