448 lines
16 KiB
Transact-SQL
448 lines
16 KiB
Transact-SQL
/*=================================================================
|
|
|
|
Explanation on the script behaviour.
|
|
-----------------------------------------------
|
|
1. Creates the configuration schema cfg
|
|
2. Creates table cfg.InstanceContext
|
|
3. Creates the trigger for date auto update
|
|
4. Add constraints for enumerations
|
|
5. Creates table cfg.Identity
|
|
7. Create trigger for date auto update
|
|
8. Create trigger to garanty one record in identity table
|
|
9. Add constraints for enumerations
|
|
10. Add some samples script for data initialization of context table
|
|
11. Add script to initialize identity table o every pharmacy.
|
|
|
|
|
|
Creation : 22.02.2017 / RTC
|
|
|
|
Modifications : 29.03.2017 / RTC Few chanages after feedback meeting.
|
|
: 12.05.2017 / RTC Update extended properties
|
|
: 31.05.2017 / RTC Grant select authorization on the tables
|
|
: 04.09.2017 / RTC Add new Context Type for Acceptance.
|
|
: 01.11.2018 / SPE Add identification for RUEGG
|
|
|
|
======================================================================*/
|
|
USE [master]
|
|
GO
|
|
/*****************************************************************/
|
|
/********* 1. CREATE SCHEMA [cfg] ********************************/
|
|
/*****************************************************************/
|
|
DECLARE @cmd varchar(1000)
|
|
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'cfg')
|
|
BEGIN
|
|
SET @cmd='CREATE SCHEMA [cfg] AUTHORIZATION dbo';
|
|
EXEC (@cmd);
|
|
PRINT 'SCHEMA [cfg] created!'
|
|
END;
|
|
|
|
/*****************************************************************/
|
|
/********* 2. CREATE TABLE [master].[cfg].[InstanceContext] *********/
|
|
/*****************************************************************/
|
|
|
|
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[master].[cfg].[InstanceContext]') AND type in (N'U'))
|
|
BEGIN
|
|
|
|
CREATE TABLE [master].[cfg].[InstanceContext]
|
|
(
|
|
InstanceContextGuid uniqueidentifier NOT NULL,
|
|
[Type] CHAR(4),
|
|
[Business] VARCHAR(6),
|
|
[Behavior] NVARCHAR(128),
|
|
[Remark] VARCHAR(256),
|
|
[UpdateDate] DATETIME NOT NULL DEFAULT getdate(),
|
|
CONSTRAINT [PK_Context] PRIMARY KEY NONCLUSTERED
|
|
(
|
|
[InstanceContextGuid] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
|
)
|
|
PRINT 'Table cfg.Context created !'
|
|
END
|
|
GO
|
|
|
|
/* Create trigger to update the date */
|
|
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[cfg].[tU_InstanceContext]'))
|
|
DROP TRIGGER [cfg].[tU_InstanceContext]
|
|
GO
|
|
|
|
CREATE TRIGGER [cfg].[tU_InstanceContext] on master.[cfg].[InstanceContext] FOR UPDATE
|
|
As
|
|
BEGIN
|
|
UPDATE t
|
|
SET t.UpdateDate = getdate()
|
|
FROM master.[cfg].[InstanceContext] t
|
|
inner join inserted I
|
|
ON t.InstanceContextGuid = I.InstanceContextGuid
|
|
End
|
|
GO
|
|
|
|
PRINT 'Trigger [tU_InstanceContext] created!'
|
|
GO
|
|
|
|
/* Add check constraint for HCIC_type*/
|
|
IF EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[cfg].[CK_Type]') AND parent_object_id = OBJECT_ID(N'[cfg].[InstanceContext]'))
|
|
BEGIN
|
|
PRINT 'Drop constraint CK_Type on table [InstanceContext] '
|
|
ALTER TABLE [cfg].[InstanceContext] DROP CONSTRAINT [CK_Type]
|
|
END
|
|
GO
|
|
|
|
PRINT 'Create constraint [CK_Type] on table [InstanceContext]'
|
|
ALTER TABLE [cfg].[InstanceContext] WITH CHECK ADD CONSTRAINT [CK_Type] CHECK ([Type] in ('DEVE', 'DEMO', 'FORM', 'VALI', 'ACCE', 'REFE', 'PREP','PROD', 'CLOS'))
|
|
GO
|
|
|
|
PRINT 'Activate contraint [CK_Type] on table [InstanceContext]'
|
|
ALTER TABLE [cfg].[InstanceContext] CHECK CONSTRAINT [CK_Type]
|
|
GO
|
|
|
|
/* Add check constraint for business*/
|
|
IF EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[cfg].[CK_Business]') AND parent_object_id = OBJECT_ID(N'[cfg].[InstanceContext]'))
|
|
BEGIN
|
|
PRINT 'Drop constraint CK_Business on table [InstanceContext] '
|
|
ALTER TABLE [cfg].[InstanceContext] DROP CONSTRAINT [CK_Business]
|
|
END
|
|
GO
|
|
|
|
PRINT 'Create constraint [CK_Business] on table [InstanceContext]'
|
|
ALTER TABLE [cfg].[InstanceContext] WITH CHECK ADD CONSTRAINT [CK_Business]
|
|
CHECK ([Business] in ('TPCENT', 'TPPHAR', 'TPDWH', 'TPREP','TSCAN', 'PINDEX', 'TPPRI', 'TFACT'))
|
|
GO
|
|
|
|
PRINT 'Activate contraint [CK_Business] on table [InstanceContext]'
|
|
ALTER TABLE [cfg].[InstanceContext] CHECK CONSTRAINT [CK_Business]
|
|
GO
|
|
|
|
/* Add check constraint behaviour*/
|
|
IF EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[cfg].[CK_Behavior]') AND parent_object_id = OBJECT_ID(N'[cfg].[InstanceContext]'))
|
|
BEGIN
|
|
PRINT 'Drop constraint CK_Behavior on table [InstanceContext] '
|
|
ALTER TABLE [cfg].[InstanceContext] DROP CONSTRAINT [CK_Behavior]
|
|
END
|
|
GO
|
|
|
|
PRINT 'Create constraint [CK_Behavior] on table [InstanceContext] '
|
|
ALTER TABLE [cfg].[InstanceContext] WITH CHECK ADD CONSTRAINT [CK_Behavior]
|
|
CHECK ([Behavior] in ('Enable', 'Disable', 'Maintain', 'Read', 'Other'))
|
|
GO
|
|
|
|
PRINT 'Activate constraint [CK_Behavior] on table [InstanceContext]'
|
|
ALTER TABLE [cfg].[InstanceContext] CHECK CONSTRAINT [CK_Behavior]
|
|
GO
|
|
|
|
/* Add unique index [UIXInstanceContext] on [InstanceConstext] */
|
|
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'[cfg].[InstanceContext]') AND name = N'UIXInstanceContext')
|
|
BEGIN
|
|
PRINT 'Suppression de l''index unique [UIXInstanceContext] sur la table [InstanceContext]'
|
|
DROP INDEX [UIXInstanceContext] ON [cfg].[InstanceContext] WITH ( ONLINE = OFF )
|
|
END
|
|
GO
|
|
|
|
PRINT 'Creation du nouvel index unique [UIXInstanceContext] sur la table [InstanceContext]'
|
|
CREATE UNIQUE NONCLUSTERED INDEX [UIXInstanceContext] ON [cfg].[InstanceContext]
|
|
(
|
|
[Type] ASC,
|
|
[Business] ASC
|
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
|
|
GO
|
|
|
|
|
|
/*****************************************************************/
|
|
/********* 3. CREATE TABLE [master].[cfg].[Identity] *********/
|
|
/*****************************************************************/
|
|
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[master].[cfg].[Identity]') AND type in (N'U'))
|
|
BEGIN
|
|
CREATE TABLE [master].[cfg].[Identity]
|
|
(
|
|
[Format] CHAR(4),
|
|
[DnsAlias] SYSNAME,
|
|
[Remark] VARCHAR(256),
|
|
[UpdateDate] DATETIME NOT NULL DEFAULT getdate(),
|
|
[Customer] VARCHAR(4)
|
|
)
|
|
PRINT 'Table Identity created!'
|
|
END
|
|
GO
|
|
|
|
/* Add Customer if not exist */
|
|
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Identity' AND COLUMN_NAME = 'Customer')
|
|
BEGIN
|
|
ALTER TABLE [cfg].[Identity] ADD [Customer] VARCHAR(4) NULL
|
|
END
|
|
GO
|
|
|
|
/* Add check constraint HCII_customer*/
|
|
IF EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[cfg].[CK_Customer]') AND parent_object_id = OBJECT_ID(N'[cfg].[Identity]'))
|
|
BEGIN
|
|
PRINT 'Drop constraint CK_Customer on table [Identity] '
|
|
ALTER TABLE [cfg].[Identity] DROP CONSTRAINT [CK_Customer]
|
|
END
|
|
GO
|
|
|
|
/* Modify Customer type */
|
|
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Identity' AND COLUMN_NAME = 'Customer' and DATA_TYPE='char')
|
|
BEGIN
|
|
ALTER TABLE [cfg].[Identity] ALTER COLUMN [Customer] VARCHAR(4) NULL
|
|
END
|
|
GO
|
|
|
|
/* Create trigger on insert to avoid having more than one record*/
|
|
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[cfg].[tI_Identity]'))
|
|
DROP TRIGGER [cfg].[tI_Identity]
|
|
GO
|
|
|
|
PRINT 'Create Trigger [tI_Identity]'
|
|
GO
|
|
|
|
CREATE TRIGGER [cfg].[tI_Identity] on master.[cfg].[Identity] INSTEAD OF INSERT
|
|
As
|
|
BEGIN
|
|
IF EXISTS (SELECT * FROM MASTER.[cfg].[Identity])
|
|
BEGIN
|
|
ROLLBACK TRANSACTION
|
|
RAISERROR ('Table can only contain one record, please update the existing record!',10,1)
|
|
END
|
|
ELSE
|
|
INSERT INTO master.[cfg].[Identity]
|
|
SELECT [Format], [DnsAlias], [Remark], [UpdateDate], [Customer]
|
|
FROM inserted
|
|
End
|
|
GO
|
|
|
|
/* Create trigger to update the date */
|
|
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[cfg].[tU_Identity]'))
|
|
DROP TRIGGER [cfg].[tU_Identity]
|
|
GO
|
|
|
|
CREATE TRIGGER [cfg].[tU_Identity] on master.[cfg].[Identity] FOR UPDATE
|
|
AS
|
|
BEGIN
|
|
UPDATE t
|
|
SET t.UpdateDate = getdate()
|
|
FROM master.[cfg].[Identity] t
|
|
inner join inserted I
|
|
On t.DnsAlias = I.DnsAlias
|
|
END
|
|
GO
|
|
PRINT 'Trigger [tu_Identity] created!'
|
|
|
|
/* Add check constraint HCII_format*/
|
|
IF EXISTS (SELECT * FROM sys.check_constraints WHERE object_id = OBJECT_ID(N'[cfg].[CK_Format]') AND parent_object_id = OBJECT_ID(N'[cfg].[Identity]'))
|
|
BEGIN
|
|
PRINT 'Drop constraint CK_Format on table [Identity] '
|
|
ALTER TABLE [cfg].[Identity] DROP CONSTRAINT [CK_Format]
|
|
END
|
|
GO
|
|
|
|
PRINT 'Create constraint [CK_Format] on table [Identity] '
|
|
ALTER TABLE [cfg].[Identity] WITH CHECK ADD CONSTRAINT [CK_Format] CHECK ([Format] in ('CVI', 'SUN', 'AMA', 'GCM', 'HCI'))
|
|
GO
|
|
|
|
PRINT 'Activate constraint [CK_Format] on table [Identity]'
|
|
ALTER TABLE [cfg].[Identity] CHECK CONSTRAINT [CK_Format]
|
|
GO
|
|
|
|
PRINT 'Create constraint [CK_Customer] on table [Identity] '
|
|
ALTER TABLE [cfg].[Identity] WITH CHECK ADD CONSTRAINT [CK_Customer] CHECK ([Customer] in ('SUN', 'AMA','CVI','HCI'))
|
|
GO
|
|
|
|
PRINT 'Activate constraint [CK_Customer] on table [Identity]'
|
|
ALTER TABLE [cfg].[Identity] CHECK CONSTRAINT [CK_Customer]
|
|
GO
|
|
|
|
/* Add extented properties */
|
|
IF EXISTS (SELECT name FROM fn_listextendedproperty (N'MS_Description','SCHEMA',N'cfg','TABLE',N'IDentity','COLUMN',N'Format') )
|
|
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'Identity'
|
|
, @level2type=N'COLUMN',@level2name=N'Format'
|
|
|
|
GO
|
|
|
|
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Specifies the subsidiary or group of the pharmacy : CVI, SUN, AMA, GCM or HCI'
|
|
, @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'Identity', @level2type=N'COLUMN',@level2name=N'Format'
|
|
GO
|
|
|
|
IF EXISTS (SELECT name FROM fn_listextendedproperty (N'MS_Description','SCHEMA',N'cfg','TABLE',N'IDentity','COLUMN',N'DnsAlias'))
|
|
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'Identity'
|
|
, @level2type=N'COLUMN',@level2name=N'DnsAlias'
|
|
|
|
GO
|
|
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Specifies the DNS alias of the machine hosting the instance.'
|
|
, @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'Identity', @level2type=N'COLUMN',@level2name=N'DnsAlias'
|
|
GO
|
|
|
|
IF EXISTS (SELECT name FROM fn_listextendedproperty (N'MS_Description','SCHEMA',N'cfg','TABLE',N'InstanceContext','COLUMN',N'Business'))
|
|
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE'
|
|
,@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Business'
|
|
|
|
GO
|
|
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Specifies the type of the environnement : DEVE ,DEMO, FORM, VALI, ACCE, REFE ,PREP, PROD or CLOS.'
|
|
, @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Business'
|
|
GO
|
|
|
|
IF EXISTS (SELECT name FROM fn_listextendedproperty (N'MS_Description','SCHEMA',N'cfg','TABLE',N'InstanceContext','COLUMN',N'Type'))
|
|
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE'
|
|
,@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Type'
|
|
|
|
GO
|
|
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Specifies the type of applications : TPCENT , TPPHAR, TPREP, TSCAN ,PINDEX, TPPRI or TFACT.'
|
|
, @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Type'
|
|
GO
|
|
|
|
IF EXISTS (SELECT name FROM fn_listextendedproperty (N'MS_Description','SCHEMA',N'cfg','TABLE',N'InstanceContext','COLUMN',N'Behavior'))
|
|
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE'
|
|
,@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Behavior'
|
|
|
|
GO
|
|
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Specifies the behaviour Enable, Disable, Maintain, Read, Other'
|
|
, @level0type=N'SCHEMA',@level0name=N'cfg', @level1type=N'TABLE',@level1name=N'InstanceContext', @level2type=N'COLUMN',@level2name=N'Behavior'
|
|
GO
|
|
|
|
/****************************************************************/
|
|
/******* AUTHORISATIONS ON TABLES cfg *********/
|
|
/****************************************************************/
|
|
USE [master]
|
|
GO
|
|
GRANT SELECT ON [master].[cfg].[Identity] TO [public] AS [dbo]
|
|
GO
|
|
GRANT SELECT ON [master].[cfg].[InstanceContext] TO [public] AS [dbo]
|
|
GO
|
|
|
|
/* Sample data insertion
|
|
|
|
/* Validation pharmacy*/
|
|
INSERT INTO [master].[cfg].[InstanceContext]
|
|
(InstanceContextGuid
|
|
,[Type]
|
|
,[Business]
|
|
,[Behavior]
|
|
,[Remark]
|
|
,[UpdateDate])
|
|
VALUES
|
|
(Newid()
|
|
,'VALI'
|
|
,'TPPHAR'
|
|
,'Enable'
|
|
,'Table initialization DBA'
|
|
,Default)
|
|
/* Reference */
|
|
INSERT INTO [master].[cfg].[InstanceContext]
|
|
(InstanceContextGuid
|
|
,[Type]
|
|
,[Business]
|
|
,[Behavior]
|
|
,[Remark]
|
|
,[UpdateDate])
|
|
VALUES
|
|
(Newid()
|
|
,'VALI'
|
|
,'TPREP'
|
|
,'Enable'
|
|
,'Table initialization DBA'
|
|
,Default)
|
|
|
|
/* Validation datawarehouse*/
|
|
INSERT INTO [master].[cfg].[InstanceContext]
|
|
(InstanceContextGuid
|
|
,[Type]
|
|
,[Business]
|
|
,[Behavior]
|
|
,[Remark]
|
|
,[UpdateDate])
|
|
VALUES
|
|
(Newid()
|
|
,'VALI'
|
|
,'TPDWH'
|
|
,'Enable'
|
|
,'Table initialization DBA'
|
|
,Default)
|
|
|
|
/* Production AMA, sun, CVI */
|
|
INSERT INTO [master].[cfg].[InstanceContext]
|
|
(InstanceContextGuid
|
|
,[Type]
|
|
,[Business]
|
|
,[Behavior]
|
|
,[Remark]
|
|
,[UpdateDate])
|
|
VALUES
|
|
(Newid()
|
|
,'PROD'
|
|
,'TPPHAR'
|
|
,'Enable'
|
|
,'Table initialization DBA'
|
|
,Default)
|
|
|
|
|
|
/* Identity table init for all except ITOP set up env */
|
|
DECLARE @Organizational_Unit as INT,
|
|
@ouCode AS char(3),
|
|
@alias as varchar(100),
|
|
@subCode as char(5),
|
|
@ouSubsidiary as int
|
|
|
|
EXEC Arizona.dbo.sp_bmc_Bmc_Applic_Default
|
|
@in_job_type = 3,
|
|
@in_param_int_1 = null,
|
|
@in_param_int_2 = null,
|
|
@in_param_varchar_1 = 'cvCurrentOrganizationalUnit',
|
|
@out_default_value = @Organizational_Unit output,
|
|
@out_param_int_1 = null
|
|
|
|
SELECT TOP 1 @ouCode = OU_code, @ouSubsidiary = ou_subsidiary
|
|
FROM Arizona.dbo.Organizational_Unit
|
|
WHERE Organizational_Unit_Id = @Organizational_Unit;
|
|
|
|
SELECT TOP 1 @subCode = CASE
|
|
WHEN @ouSubsidiary in (1,111) THEN 'SUN'
|
|
WHEN @ouSubsidiary = 102 THEN 'AMA'
|
|
WHEN @ouSubsidiary = 124 THEN 'CVI''
|
|
END
|
|
|
|
SELECT TOP 1 @alias = SS_server_name
|
|
FROM Arizona.dbo.System_site
|
|
WHERE CHARINDEX(@ouCode,SS_server_name) > 0
|
|
|
|
select @ouSubsidiary [SubId], @subCode [SubCode], @alias [alias]
|
|
|
|
INSERT INTO [master].[cfg].[Identity]
|
|
([Format]
|
|
,[DnsAlias]
|
|
,[Remark]
|
|
,[UpdateDate])
|
|
VALUES
|
|
(@subCode
|
|
,isnull(@alias, 'No DNS found')
|
|
,'Record initialization DBA'
|
|
,Default)
|
|
|
|
/* Identity table init for ITOP set up env */
|
|
INSERT INTO [master].[cfg].[Identity]
|
|
([Format]
|
|
,[DnsAlias]
|
|
,[Remark]
|
|
,[UpdateDate])
|
|
VALUES
|
|
('HCI'
|
|
,'DNS to update'
|
|
,'Initialization ITOP'
|
|
,Default)
|
|
|
|
/* New Rollout */
|
|
INSERT INTO [master].[cfg].[InstanceContext]
|
|
(InstanceContextGuid
|
|
,[Type]
|
|
,[Business]
|
|
,[Behavior]
|
|
,[Remark]
|
|
,[UpdateDate])
|
|
VALUES
|
|
(Newid()
|
|
,'PREP'
|
|
,'TPPHAR'
|
|
,'Enable'
|
|
,'Initialization ITOP'
|
|
,Default)
|
|
|
|
*/
|
|
|
|
|
|
GO |