Files
sql-scripts/DELPHIX - schema changes.sql
Schork Thierry (Galenica - ADM) 63d058a7eb added files from swmgmt03
2025-09-22 09:00:00 +02:00

347 lines
12 KiB
Transact-SQL

USE [HCITools];
IF NOT EXISTS(SELECT 1 FROM sys.[schemas] s WHERE s.[name]='delphix')
BEGIN
EXEC('CREATE SCHEMA [delphix]');
END
GO
IF OBJECT_ID('delphix.delphix_schema_changes') IS NOT NULL
BEGIN
DROP PROCEDURE delphix.delphix_schema_changes;
END
GO
IF OBJECT_ID('dbo.delphix_schema_changes') IS NOT NULL
BEGIN
DROP PROCEDURE dbo.delphix_schema_changes;
END
GO
/*
OC-945
This procedure is used by Delphix to alter the schema in the databases that must be masked.
It will add new columns to existing tables, that will be used by the masking engine.
The following fields are added:
int arizona.dbo.addresse
TT_
*/
CREATE PROCEDURE delphix.delphix_schema_changes
@removeSchemaChanges BIT = 0
AS
BEGIN
SET XACT_ABORT ON;
SET NOCOUNT ON;
DECLARE @tblAlter TABLE(dbName VARCHAR(50) NOT NULL, queryAlterTxt NVARCHAR(MAX) NOT NULL, queryUpdateTxt NVARCHAR(MAX) NOT NULL);
IF @removeSchemaChanges = 1
BEGIN
INSERT INTO @tblAlter ([dbName]
,[queryAlterTxt]
,[queryUpdateTxt])
VALUES(
'arizona'
,'
IF EXISTS(
SELECT 1
FROM [INFORMATION_SCHEMA].[COLUMNS] c
WHERE c.[TABLE_NAME]=''address''
AND c.[TABLE_SCHEMA]=''dbo''
AND c.[COLUMN_NAME]=''TT_masking''
)
BEGIN
IF (OBJECT_ID(''DF_TT_masking'') IS NOT NULL)
BEGIN
ALTER TABLE dbo.[Address] DROP CONSTRAINT [DF_TT_masking];
END
ALTER TABLE dbo.[Address] DROP COLUMN [TT_masking];
END
'
,''
)
,(
'arizona_delphix'
,'
IF EXISTS(
SELECT 1
FROM [INFORMATION_SCHEMA].[COLUMNS] c
WHERE c.[TABLE_NAME]=''address''
AND c.[TABLE_SCHEMA]=''dbo''
AND c.[COLUMN_NAME]=''TT_masking''
)
BEGIN
IF (OBJECT_ID(''DF_TT_masking'') IS NOT NULL)
BEGIN
ALTER TABLE dbo.[Address] DROP CONSTRAINT [DF_TT_masking];
END
ALTER TABLE dbo.[Address] DROP COLUMN [TT_masking];
END
'
,''
);
END
ELSE
BEGIN
INSERT INTO @tblAlter ([dbName]
,[queryAlterTxt]
,[queryUpdateTxt])
VALUES(
'arizona'
,'
IF NOT EXISTS(
SELECT 1
FROM [INFORMATION_SCHEMA].[COLUMNS] c
WHERE c.[TABLE_NAME]=''address''
AND c.[TABLE_SCHEMA]=''dbo''
AND c.[COLUMN_NAME]=''TT_masking''
)
BEGIN
ALTER TABLE dbo.[Address] ADD TT_masking VARCHAR(50) NOT NULL CONSTRAINT DF_TT_masking DEFAULT ''MASK'';
END
'
,'
--set everything to be masked
UPDATE ad
SET ad.TT_masking = ''MASK''
FROM Arizona.dbo.Address ad
WHERE ad.TT_masking <> ''MASK'';
--exclude from masking what we want to keep
UPDATE ad
SET ad.TT_masking = ''PERSIST''
FROM Arizona.dbo.Address ad
JOIN Arizona.dbo.Customer cst
ON [cst].[CUST_address] = [ad].[Address_ID]
LEFT JOIN Arizona.dbo.[Subsidiary] sub
ON [cst].[CUST_subsidiary] = [sub].[Subsidiary_ID]
WHERE [sub].[Subsidiary_ID] IS NOT NULL
AND ( [ad].[AD_last_name] LIKE ''TEST %''
OR [ad].[AD_name] LIKE ''TEST %''
OR [ad].[AD_last_name] LIKE ''Assura%''
OR [ad].[AD_last_name] LIKE ''PRESCRIPTION%''
OR [ad].[AD_last_name] LIKE ''RETETE%''
OR [ad].[AD_last_name] LIKE ''USER%''
OR [ad].[AD_last_name] LIKE ''ONBOARD%''
OR [ad].[AD_last_name] LIKE ''SUSPICIOUS%''
OR [ad].[AD_last_name] LIKE ''DOE''
OR [ad].[AD_last_name] LIKE ''GIALLO%''
OR [ad].[AD_last_name] LIKE ''TOLKIEN%''
OR [ad].[AD_last_name] LIKE ''DEMO %''
OR [ad].[AD_last_name] LIKE ''DOCUMEDIS%''
OR [ad].[AD_last_name] = ''DEMO''
OR [ad].[AD_last_name] LIKE ''OMNICHANNEL%''
OR [ad].[AD_last_name] LIKE ''LASTNAME%''
OR [ad].[AD_last_name] LIKE ''MeiXin%''
OR [ad].[AD_last_name] LIKE ''DIPLOMATE%''
OR [ad].[AD_last_name] LIKE ''NO %''
OR [ad].[AD_last_name] LIKE ''ONLY%''
OR [ad].[AD_last_name] LIKE ''RDL%''
OR [ad].[AD_last_name] LIKE ''USER%''
OR [ad].[AD_last_name] LIKE ''GALEXIS%''
OR [ad].[AD_last_name] LIKE ''APOS%''
OR [ad].[AD_last_name] LIKE ''APOSANDMAGENTO%''
OR [ad].[AD_last_name] LIKE ''Activate''
OR [ad].[AD_last_name] LIKE ''Sunstore''
OR [ad].[AD_last_name] LIKE ''Coopvitality''
OR [ad].[AD_last_name] LIKE ''Ama Plus Sun''
OR [ad].[AD_last_name] LIKE ''Ama Plus Cvi''
OR [ad].[AD_last_name] LIKE ''Sun Plus Cvi''
OR [ad].[AD_last_name] LIKE ''Ama Sun Cvi''
OR [ad].[AD_last_name] LIKE ''test%[0-9]%''
OR [ad].[AD_first_name] LIKE ''test%[0-9]%''
OR [ad].[AD_name] LIKE ''%SUNCLUB%''
OR [ad].[AD_name] LIKE ''%QUALITY%''
OR [ad].[AD_name] LIKE ''%STARCARD%''
OR [ad].[AD_name] LIKE ''%CLIENT%''
OR [ad].[AD_name] LIKE ''%MAGENTO%''
OR [ad].[AD_name] LIKE ''%RENOUVELLEMENT%''
OR [ad].[AD_name] LIKE ''%Mitarbeiter%''
OR [ad].[AD_name] LIKE ''% DEV %''
OR [ad].[AD_name] LIKE ''CERN Service%''
OR [ad].[AD_name] LIKE ''BALEXERT CENTRE%''
OR [ad].[AD_name] LIKE ''G.H.O.L.%''
OR [ad].[AD_first_name] LIKE ''Test %''
OR [ad].[AD_first_name] = ''Test''
OR [ad].[AD_first_name] LIKE ''ONLYAPOS%''
OR [ad].[AD_first_name] LIKE ''In APOS%''
OR [ad].[AD_last_name] = ''DEMO''
OR (
[ad].[Address_ID] < 1500000000
AND NOT EXISTS (SELECT 3 FROM [dbo].[Employee] WHERE EM_address = ad.Address_ID)
AND NOT EXISTS (SELECT 3 FROM [dbo].[Customer] WHERE CUST_address = ad.Address_ID)
)
)
AND [ad].[TT_masking] <> ''PERSIST''
UPDATE ad
SET [ad].[TT_masking] = ''PERSIST''
FROM Arizona.dbo.PH_prescriber ph
INNER JOIN Arizona.dbo.Address ad
ON [ad].[Address_ID] = [ph].[PHPR_address]
WHERE [ph].[PHPR_deactivation_date] IS NULL
AND [ad].[TT_masking] <> ''PERSIST'';
'
)
,(
'arizona_delphix'
,'
IF NOT EXISTS(
SELECT 1
FROM [INFORMATION_SCHEMA].[COLUMNS] c
WHERE c.[TABLE_NAME]=''address''
AND c.[TABLE_SCHEMA]=''dbo''
AND c.[COLUMN_NAME]=''TT_masking''
)
BEGIN
ALTER TABLE dbo.[Address] ADD TT_masking VARCHAR(50) NOT NULL CONSTRAINT DF_TT_masking DEFAULT ''MASK'';
END
'
,'
--set everything to be masked
UPDATE ad
SET ad.TT_masking = ''MASK''
FROM Arizona.dbo.Address ad
WHERE ad.TT_masking <> ''MASK'';
--exclude from masking what we want to keep
UPDATE ad
SET ad.TT_masking = ''PERSIST''
FROM Arizona.dbo.Address ad
JOIN Arizona.dbo.Customer cst
ON [cst].[CUST_address] = [ad].[Address_ID]
LEFT JOIN Arizona.dbo.[Subsidiary] sub
ON [cst].[CUST_subsidiary] = [sub].[Subsidiary_ID]
WHERE [sub].[Subsidiary_ID] IS NOT NULL
AND ( [ad].[AD_last_name] LIKE ''TEST %''
OR [ad].[AD_name] LIKE ''TEST %''
OR [ad].[AD_last_name] LIKE ''Assura%''
OR [ad].[AD_last_name] LIKE ''PRESCRIPTION%''
OR [ad].[AD_last_name] LIKE ''RETETE%''
OR [ad].[AD_last_name] LIKE ''USER%''
OR [ad].[AD_last_name] LIKE ''ONBOARD%''
OR [ad].[AD_last_name] LIKE ''SUSPICIOUS%''
OR [ad].[AD_last_name] LIKE ''DOE''
OR [ad].[AD_last_name] LIKE ''GIALLO%''
OR [ad].[AD_last_name] LIKE ''TOLKIEN%''
OR [ad].[AD_last_name] LIKE ''DEMO %''
OR [ad].[AD_last_name] LIKE ''DOCUMEDIS%''
OR [ad].[AD_last_name] = ''DEMO''
OR [ad].[AD_last_name] LIKE ''OMNICHANNEL%''
OR [ad].[AD_last_name] LIKE ''LASTNAME%''
OR [ad].[AD_last_name] LIKE ''MeiXin%''
OR [ad].[AD_last_name] LIKE ''DIPLOMATE%''
OR [ad].[AD_last_name] LIKE ''NO %''
OR [ad].[AD_last_name] LIKE ''ONLY%''
OR [ad].[AD_last_name] LIKE ''RDL%''
OR [ad].[AD_last_name] LIKE ''USER%''
OR [ad].[AD_last_name] LIKE ''GALEXIS%''
OR [ad].[AD_last_name] LIKE ''APOS%''
OR [ad].[AD_last_name] LIKE ''APOSANDMAGENTO%''
OR [ad].[AD_last_name] LIKE ''Activate''
OR [ad].[AD_last_name] LIKE ''Sunstore''
OR [ad].[AD_last_name] LIKE ''Coopvitality''
OR [ad].[AD_last_name] LIKE ''Ama Plus Sun''
OR [ad].[AD_last_name] LIKE ''Ama Plus Cvi''
OR [ad].[AD_last_name] LIKE ''Sun Plus Cvi''
OR [ad].[AD_last_name] LIKE ''Ama Sun Cvi''
OR [ad].[AD_last_name] LIKE ''test%[0-9]%''
OR [ad].[AD_first_name] LIKE ''test%[0-9]%''
OR [ad].[AD_name] LIKE ''%SUNCLUB%''
OR [ad].[AD_name] LIKE ''%QUALITY%''
OR [ad].[AD_name] LIKE ''%STARCARD%''
OR [ad].[AD_name] LIKE ''%CLIENT%''
OR [ad].[AD_name] LIKE ''%MAGENTO%''
OR [ad].[AD_name] LIKE ''%RENOUVELLEMENT%''
OR [ad].[AD_name] LIKE ''%Mitarbeiter%''
OR [ad].[AD_name] LIKE ''% DEV %''
OR [ad].[AD_name] LIKE ''CERN Service%''
OR [ad].[AD_name] LIKE ''BALEXERT CENTRE%''
OR [ad].[AD_name] LIKE ''G.H.O.L.%''
OR [ad].[AD_first_name] LIKE ''Test %''
OR [ad].[AD_first_name] = ''Test''
OR [ad].[AD_first_name] LIKE ''ONLYAPOS%''
OR [ad].[AD_first_name] LIKE ''In APOS%''
OR [ad].[AD_last_name] = ''DEMO''
OR (
[ad].[Address_ID] < 1500000000
AND NOT EXISTS (SELECT 3 FROM [dbo].[Employee] WHERE EM_address = ad.Address_ID)
AND NOT EXISTS (SELECT 3 FROM [dbo].[Customer] WHERE CUST_address = ad.Address_ID)
)
)
AND [ad].[TT_masking] <> ''PERSIST''
UPDATE ad
SET [ad].[TT_masking] = ''PERSIST''
FROM Arizona.dbo.PH_prescriber ph
INNER JOIN Arizona.dbo.Address ad
ON [ad].[Address_ID] = [ph].[PHPR_address]
WHERE [ph].[PHPR_deactivation_date] IS NULL
AND [ad].[TT_masking] <> ''PERSIST'';
'
);
END
/* declare variables */
DECLARE @dbName VARCHAR(50), @queryAlterTxt NVARCHAR(MAX), @queryUpdateTxt NVARCHAR(MAX), @queryComplete NVARCHAR(MAX);
DECLARE csrAlter CURSOR FAST_FORWARD READ_ONLY FOR
SELECT [dbName],
[queryAlterTxt],
[queryUpdateTxt]
FROM @tblAlter s
WHERE EXISTS (
SELECT 1
FROM sys.databases d
WHERE d.[name] = s.[dbName]
)
OPEN csrAlter
FETCH NEXT FROM csrAlter INTO @dbName, @queryAlterTxt, @queryUpdateTxt
WHILE @@FETCH_STATUS = 0
BEGIN
SET @queryComplete='USE '+@dbName+';'+CHAR(13)+CHAR(10)+@queryAlterTxt;
--PRINT @queryComplete;
EXEC(@queryComplete);
SET @queryComplete='USE '+@dbName+';'+CHAR(13)+CHAR(10)+@queryUpdateTxt;
--PRINT @queryComplete;
EXEC(@queryComplete);
FETCH NEXT FROM csrAlter INTO @dbName, @queryAlterTxt, @queryUpdateTxt
END
CLOSE csrAlter
DEALLOCATE csrAlter
END
GO
BEGIN TRANSACTION
EXEC delphix.[delphix_schema_changes] @removeSchemaChanges = 0
EXEC('
SELECT ''arizona'' as db_name, COUNT(1) AS cnt, TT_masking
FROM arizona.dbo.[Address]
GROUP BY TT_masking
')
IF EXISTS(SELECT 1 FROM sys.[databases] WHERE name ='arizona_delphix')
EXEC('
SELECT ''arizona_delphix'' as db_name, COUNT(1) AS cnt, TT_masking
FROM arizona_delphix.dbo.[Address]
GROUP BY TT_masking
')
EXEC delphix.[delphix_schema_changes] @removeSchemaChanges = 1
SELECT TOP 10 * FROM [Arizona].[dbo].[Address];
ROLLBACK TRANSACTION
--COMMIT TRANSACTION