FiledHistory.SQL 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. USE [master];
  2. GO
  3. -- STEP 0: Add Filegroups to AcumaticaDB
  4. ALTER DATABASE [AcumaticaDB] ADD FILEGROUP FG_WFHT_0;
  5. ALTER DATABASE [AcumaticaDB] ADD FILEGROUP FG_WFHT_1;
  6. ALTER DATABASE [AcumaticaDB] ADD FILEGROUP FG_WFHT_2;
  7. ALTER DATABASE [AcumaticaDB] ADD FILEGROUP FG_WFHT_3;
  8. ALTER DATABASE [AcumaticaDB] ADD FILEGROUP FG_WFHT_4;
  9. ALTER DATABASE [AcumaticaDB] ADD FILEGROUP FG_WFHT_5;
  10. ALTER DATABASE [AcumaticaDB] ADD FILEGROUP FG_WFHT_6;
  11. ALTER DATABASE [AcumaticaDB] ADD FILEGROUP FG_WFHT_7;
  12. ALTER DATABASE [AcumaticaDB] ADD FILEGROUP FG_WFHT_8;
  13. ALTER DATABASE [AcumaticaDB] ADD FILEGROUP FG_WFHT_9;
  14. GO
  15. -- STEP 0.1: Add Files to Filegroups (adjust paths if needed)
  16. ALTER DATABASE [AcumaticaDB] ADD FILE (NAME = WFHT_0, FILENAME = 'C:\SQLData\WFHT_0.ndf') TO FILEGROUP FG_WFHT_0;
  17. ALTER DATABASE [AcumaticaDB] ADD FILE (NAME = WFHT_1, FILENAME = 'C:\SQLData\WFHT_1.ndf') TO FILEGROUP FG_WFHT_1;
  18. ALTER DATABASE [AcumaticaDB] ADD FILE (NAME = WFHT_2, FILENAME = 'C:\SQLData\WFHT_2.ndf') TO FILEGROUP FG_WFHT_2;
  19. ALTER DATABASE [AcumaticaDB] ADD FILE (NAME = WFHT_3, FILENAME = 'C:\SQLData\WFHT_3.ndf') TO FILEGROUP FG_WFHT_3;
  20. ALTER DATABASE [AcumaticaDB] ADD FILE (NAME = WFHT_4, FILENAME = 'C:\SQLData\WFHT_4.ndf') TO FILEGROUP FG_WFHT_4;
  21. ALTER DATABASE [AcumaticaDB] ADD FILE (NAME = WFHT_5, FILENAME = 'C:\SQLData\WFHT_5.ndf') TO FILEGROUP FG_WFHT_5;
  22. ALTER DATABASE [AcumaticaDB] ADD FILE (NAME = WFHT_6, FILENAME = 'C:\SQLData\WFHT_6.ndf') TO FILEGROUP FG_WFHT_6;
  23. ALTER DATABASE [AcumaticaDB] ADD FILE (NAME = WFHT_7, FILENAME = 'C:\SQLData\WFHT_7.ndf') TO FILEGROUP FG_WFHT_7;
  24. ALTER DATABASE [AcumaticaDB] ADD FILE (NAME = WFHT_8, FILENAME = 'C:\SQLData\WFHT_8.ndf') TO FILEGROUP FG_WFHT_8;
  25. ALTER DATABASE [AcumaticaDB] ADD FILE (NAME = WFHT_9, FILENAME = 'C:\SQLData\WFHT_9.ndf') TO FILEGROUP FG_WFHT_9;
  26. GO
  27. -- STEP 1: Drop existing table if it exists
  28. USE [AcumaticaDB];
  29. GO
  30. IF OBJECT_ID('dbo.FieldHistoryTracker', 'U') IS NOT NULL
  31. DROP TABLE dbo.FieldHistoryTracker;
  32. GO
  33. -- STEP 2: Create Partition Function
  34. IF NOT EXISTS (SELECT * FROM sys.partition_functions WHERE name = 'pf_FieldHistoryTracker')
  35. CREATE PARTITION FUNCTION pf_FieldHistoryTracker (INT)
  36. AS RANGE LEFT FOR VALUES (1,2,3,4,5,6,7,8,9);
  37. GO
  38. -- STEP 3: Create Partition Scheme
  39. IF NOT EXISTS (SELECT * FROM sys.partition_schemes WHERE name = 'ps_FieldHistoryTracker')
  40. CREATE PARTITION SCHEME ps_FieldHistoryTracker
  41. AS PARTITION pf_FieldHistoryTracker TO
  42. (FG_WFHT_0, FG_WFHT_1, FG_WFHT_2, FG_WFHT_3, FG_WFHT_4,
  43. FG_WFHT_5, FG_WFHT_6, FG_WFHT_7, FG_WFHT_8, FG_WFHT_9);
  44. GO
  45. -- STEP 4: Create Table using partition scheme
  46. CREATE TABLE dbo.FieldHistoryTracker (
  47. ID INT IDENTITY(1,1) NOT NULL,
  48. CompanyID INT NOT NULL,
  49. FieldCode NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  50. FieldCodeHash AS (ABS(CHECKSUM(FieldCode)) % 10) PERSISTED,
  51. KeyType NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  52. RelatedKey NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  53. UDF BIT DEFAULT 0 NOT NULL,
  54. Active BIT DEFAULT 0 NOT NULL,
  55. FieldDescription NVARCHAR(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  56. FieldValueCode NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  57. FieldValueText NVARCHAR(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
  58. FieldValueDecimal DECIMAL(18,6) NULL,
  59. AppliedDate DATETIME NOT NULL,
  60. AppliedbyUserID UNIQUEIDENTIFIER NULL,
  61. AppliedbyUserName NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  62. LastModifiedDateTime DATETIME NOT NULL,
  63. LastModifiedByName NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
  64. LastModifiedByID UNIQUEIDENTIFIER NULL,
  65. PRIMARY KEY CLUSTERED (FieldCodeHash, ID)
  66. ON ps_FieldHistoryTracker(FieldCodeHash),
  67. UNIQUE (FieldCodeHash, FieldCode, CompanyID, ID)
  68. );
  69. GO
  70. -- STEP 5: Create supporting indexes
  71. CREATE INDEX IX_FieldHistoryTracker_FieldCodeHash
  72. ON dbo.FieldHistoryTracker (FieldCodeHash, FieldCode)
  73. ON ps_FieldHistoryTracker(FieldCodeHash);
  74. GO
  75. CREATE INDEX IX_FieldHistoryTracker_Active_UDF
  76. ON dbo.FieldHistoryTracker (CompanyID, Active, UDF, AppliedDate);
  77. GO
  78. CREATE INDEX IX_FieldHistoryTracker_FieldValue
  79. ON dbo.FieldHistoryTracker (FieldValueText, AppliedDate, AppliedbyUserID, AppliedbyUserName, Active, UDF);
  80. GO
  81. CREATE INDEX IX_FieldHistoryTracker_AppliedDate
  82. ON dbo.FieldHistoryTracker (AppliedDate);
  83. GO
  84. CREATE INDEX IX_FieldHistoryTracker_AppliedByUser
  85. ON dbo.FieldHistoryTracker (AppliedbyUserID, AppliedbyUserName);
  86. GO
  87. CREATE INDEX IX_FieldHistoryTracker_AppliedByUser_Active
  88. ON dbo.FieldHistoryTracker (AppliedbyUserID, Active, AppliedDate);
  89. GO
  90. CREATE INDEX IX_FieldHistoryTracker_KeyType_RelatedKey
  91. ON dbo.FieldHistoryTracker (KeyType, RelatedKey);
  92. GO
  93. CREATE INDEX IX_FieldHistoryTracker_FieldCodeValueType
  94. ON dbo.FieldHistoryTracker (FieldCode, FieldValueCode);
  95. GO