Add VoiceNotes firmware and CDM customer service SQL project
VoiceNotes is an Arduino sketch for the Waveshare ESP32-C6-LCD-0.85 that records meetings and voice memos to microSD and turns them into notes: - Records 16 kHz mono WAV (up to 4 h) from the ES7210 dual mics, with a boosted preamp and soft-limited digital gain - Transcribes via an OpenAI-compatible speech-to-text API in ~10 min parts cut at quiet points, with retries and resume after failures - Summarizes the transcript with Claude into meeting notes (decisions, action items, topics with timestamps), streamed to and from the card - Copies the notes to Nextcloud over WebDAV - Shows recording/processing state on the 0.85" LCD and the LED ring - Works around the board's SD card failing multi-sector reads Credentials live in VoiceNotes/secrets.h, which is git-ignored; see secrets.example.h. Also adds the Microsoft CDM customer service SQL implementation (DDL, sample data, reporting queries and docs). Its README is renamed to CDM_README.md so the repository README stays at the top level. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ef38a502d8
commit
3b371cdb28
@@ -0,0 +1,755 @@
|
||||
-- Microsoft Common Data Model - Customer Service
|
||||
-- Bulk Data Generation Script - 100x Sample Data Over 3 Months
|
||||
-- Version: 1.0
|
||||
-- Generates realistic data spread over the last 3 months
|
||||
|
||||
USE CDM_CustomerService;
|
||||
GO
|
||||
|
||||
PRINT '========================================';
|
||||
PRINT 'Starting Bulk Data Generation...';
|
||||
PRINT '========================================';
|
||||
PRINT '';
|
||||
|
||||
DECLARE @StartDate DATE = DATEADD(MONTH, -3, CAST(GETUTCDATE() AS DATE));
|
||||
DECLARE @EndDate DATE = CAST(GETUTCDATE() AS DATE);
|
||||
DECLARE @i INT = 0;
|
||||
DECLARE @j INT = 0;
|
||||
DECLARE @RandomDate DATETIME2;
|
||||
DECLARE @RandomUserId UNIQUEIDENTIFIER;
|
||||
DECLARE @RandomAccountId UNIQUEIDENTIFIER;
|
||||
DECLARE @RandomContactId UNIQUEIDENTIFIER;
|
||||
DECLARE @RandomServiceId UNIQUEIDENTIFIER;
|
||||
DECLARE @RandomResourceId UNIQUEIDENTIFIER;
|
||||
DECLARE @RandomContractId UNIQUEIDENTIFIER;
|
||||
DECLARE @RandomEntitlementId UNIQUEIDENTIFIER;
|
||||
|
||||
-- ============================================================================
|
||||
-- CLEAR EXISTING SAMPLE DATA (OPTIONAL - COMMENT OUT IF YOU WANT TO KEEP IT)
|
||||
-- ============================================================================
|
||||
PRINT 'Clearing existing sample data...';
|
||||
|
||||
DELETE FROM cdm.SLAKPIInstance;
|
||||
DELETE FROM cdm.CaseResolution;
|
||||
DELETE FROM cdm.IncidentKnowledgeBaseRecord;
|
||||
DELETE FROM cdm.KnowledgeArticleIncident;
|
||||
DELETE FROM cdm.ActivityParty;
|
||||
DELETE FROM cdm.ServiceActivity;
|
||||
DELETE FROM cdm.Task;
|
||||
DELETE FROM cdm.[Case];
|
||||
DELETE FROM cdm.ChildIncidentCount;
|
||||
DELETE FROM cdm.EntitlementProduct;
|
||||
DELETE FROM cdm.EntitlementContact;
|
||||
DELETE FROM cdm.Entitlement;
|
||||
DELETE FROM cdm.ServiceContractContact;
|
||||
DELETE FROM cdm.ContractLine;
|
||||
DELETE FROM cdm.Contract;
|
||||
DELETE FROM cdm.ResourceExpansion;
|
||||
DELETE FROM cdm.ResourceSpecification;
|
||||
DELETE FROM cdm.SchedulingGroup;
|
||||
DELETE FROM cdm.FacilityEquipment;
|
||||
DELETE FROM cdm.Resource;
|
||||
DELETE FROM cdm.Service;
|
||||
DELETE FROM cdm.Contact;
|
||||
DELETE FROM cdm.Account;
|
||||
DELETE FROM cdm.Site;
|
||||
|
||||
PRINT 'Existing sample data cleared.';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE USERS (20 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 20 Users...';
|
||||
SET @i = 1;
|
||||
|
||||
INSERT INTO cdm.[User] (userName, firstName, lastName, email, phone, mobilePhone, isActive)
|
||||
VALUES
|
||||
('jsmith', 'John', 'Smith', 'john.smith@company.com', '555-0101', '555-6001', 1),
|
||||
('mwhite', 'Maria', 'White', 'maria.white@company.com', '555-0102', '555-6002', 1),
|
||||
('rjones', 'Robert', 'Jones', 'robert.jones@company.com', '555-0103', '555-6003', 1),
|
||||
('sbrown', 'Sarah', 'Brown', 'sarah.brown@company.com', '555-0104', '555-6004', 1),
|
||||
('mtaylor', 'Michael', 'Taylor', 'michael.taylor@company.com', '555-0105', '555-6005', 1),
|
||||
('ejones', 'Emily', 'Jones', 'emily.jones@company.com', '555-0106', '555-6006', 1),
|
||||
('dmiller', 'David', 'Miller', 'david.miller@company.com', '555-0107', '555-6007', 1),
|
||||
('jwilson', 'James', 'Wilson', 'james.wilson@company.com', '555-0108', '555-6008', 1),
|
||||
('agarcia', 'Angela', 'Garcia', 'angela.garcia@company.com', '555-0109', '555-6009', 1),
|
||||
('crodriguez', 'Carlos', 'Rodriguez', 'carlos.rodriguez@company.com', '555-0110', '555-6010', 1),
|
||||
('lmartinez', 'Lisa', 'Martinez', 'lisa.martinez@company.com', '555-0111', '555-6011', 1),
|
||||
('phuang', 'Peter', 'Huang', 'peter.huang@company.com', '555-0112', '555-6012', 1),
|
||||
('ktran', 'Kim', 'Tran', 'kim.tran@company.com', '555-0113', '555-6013', 1),
|
||||
('nsingh', 'Nisha', 'Singh', 'nisha.singh@company.com', '555-0114', '555-6014', 1),
|
||||
('opatel', 'Omkar', 'Patel', 'omkar.patel@company.com', '555-0115', '555-6015', 1),
|
||||
('rkim', 'Rachel', 'Kim', 'rachel.kim@company.com', '555-0116', '555-6016', 1),
|
||||
('tfernandez', 'Thomas', 'Fernandez', 'thomas.fernandez@company.com', '555-0117', '555-6017', 1),
|
||||
('vlee', 'Victoria', 'Lee', 'victoria.lee@company.com', '555-0118', '555-6018', 1),
|
||||
('wchen', 'William', 'Chen', 'william.chen@company.com', '555-0119', '555-6019', 1),
|
||||
('ylopez', 'Yolanda', 'Lopez', 'yolanda.lopez@company.com', '555-0120', '555-6020', 1);
|
||||
|
||||
PRINT 'Users generated: 20';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE SITES (15 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 15 Sites...';
|
||||
|
||||
INSERT INTO cdm.Site (siteName, description, city, stateProvince, country, phone, email, isHeadquarters, createdBy)
|
||||
SELECT 'New York Office', 'Main headquarters', 'New York', 'NY', 'USA', '555-0200', 'ny@company.com', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Los Angeles Office', 'West coast support center', 'Los Angeles', 'CA', 'USA', '555-0201', 'la@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Chicago Office', 'Midwest operations', 'Chicago', 'IL', 'USA', '555-0202', 'chi@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Houston Office', 'South operations', 'Houston', 'TX', 'USA', '555-0203', 'hou@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Phoenix Office', 'Southwest operations', 'Phoenix', 'AZ', 'USA', '555-0204', 'phx@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Philadelphia Office', 'Northeast operations', 'Philadelphia', 'PA', 'USA', '555-0205', 'phi@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'San Antonio Office', 'Texas operations', 'San Antonio', 'TX', 'USA', '555-0206', 'sat@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'San Diego Office', 'California operations', 'San Diego', 'CA', 'USA', '555-0207', 'sdi@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Dallas Office', 'Texas headquarters', 'Dallas', 'TX', 'USA', '555-0208', 'dal@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'San Jose Office', 'Silicon Valley', 'San Jose', 'CA', 'USA', '555-0209', 'sjc@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Austin Office', 'Tech hub', 'Austin', 'TX', 'USA', '555-0210', 'ats@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Jacksonville Office', 'Southeast operations', 'Jacksonville', 'FL', 'USA', '555-0211', 'jax@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Fort Worth Office', 'Texas operations', 'Fort Worth', 'TX', 'USA', '555-0212', 'ftw@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Columbus Office', 'Midwest operations', 'Columbus', 'OH', 'USA', '555-0213', 'cmh@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Charlotte Office', 'Southeast operations', 'Charlotte', 'NC', 'USA', '555-0214', 'clt@company.com', 0, TOP 1 userId FROM cdm.[User] ORDER BY NEWID();
|
||||
|
||||
PRINT 'Sites generated: 15';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE ACCOUNTS (400 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 400 Accounts...';
|
||||
|
||||
DECLARE @AccountIndex INT = 1;
|
||||
DECLARE @SiteId UNIQUEIDENTIFIER;
|
||||
DECLARE @OwnerId UNIQUEIDENTIFIER;
|
||||
|
||||
WHILE @AccountIndex <= 400
|
||||
BEGIN
|
||||
SELECT @SiteId = siteId FROM cdm.Site ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SELECT @OwnerId = userId FROM cdm.[User] ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
|
||||
INSERT INTO cdm.Account
|
||||
(accountName, accountNumber, description, email, phone, ownerUserId, siteId, accountType, industry, numberOfEmployees, revenue, isActive)
|
||||
VALUES
|
||||
('Account ' + CAST(@AccountIndex AS VARCHAR(5)),
|
||||
'ACC-' + RIGHT('0000' + CAST(@AccountIndex AS VARCHAR(5)), 5),
|
||||
'Customer account ' + CAST(@AccountIndex AS VARCHAR(5)),
|
||||
'contact' + CAST(@AccountIndex AS VARCHAR(5)) + '@customer.com',
|
||||
'555-' + RIGHT('0000' + CAST(2000 + @AccountIndex AS VARCHAR(5)), 4),
|
||||
@OwnerId,
|
||||
@SiteId,
|
||||
CASE WHEN @AccountIndex % 5 = 0 THEN 'Prospect' ELSE 'Customer' END,
|
||||
CHOOSE(@AccountIndex % 10 + 1, 'Technology', 'Manufacturing', 'Finance', 'Healthcare', 'Retail', 'Consulting', 'Telecommunications', 'Education', 'Government', 'Energy'),
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 5000 + 50 AS INT),
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 10000000 + 100000 AS DECIMAL(18,2)),
|
||||
1);
|
||||
|
||||
SET @AccountIndex = @AccountIndex + 1;
|
||||
END
|
||||
|
||||
PRINT 'Accounts generated: 400';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE CONTACTS (500 total - ~1.25 per account)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 500 Contacts...';
|
||||
|
||||
DECLARE @ContactIndex INT = 1;
|
||||
DECLARE @AccountId UNIQUEIDENTIFIER;
|
||||
DECLARE @ContactOwnerId UNIQUEIDENTIFIER;
|
||||
DECLARE @FirstNames TABLE (name NVARCHAR(50));
|
||||
DECLARE @LastNames TABLE (name NVARCHAR(50));
|
||||
|
||||
INSERT INTO @FirstNames VALUES ('John'), ('Jane'), ('Michael'), ('Sarah'), ('David'), ('Emma'), ('Robert'), ('Lisa'), ('James'), ('Mary'), ('William'), ('Jennifer'), ('Richard'), ('Patricia'), ('Joseph'), ('Linda'), ('Charles'), ('Barbara'), ('Christopher'), ('Carol'), ('Daniel'), ('Margaret'), ('Matthew'), ('Susan'), ('Anthony'), ('Dorothy'), ('Mark'), ('Ashley'), ('Donald'), ('Kimberly'), ('Steven'), ('Donna'), ('Paul'), ('Carol'), ('Andrew'), ('Michelle'), ('Joshua'), ('Emily'), ('Kenneth'), ('Melissa');
|
||||
|
||||
INSERT INTO @LastNames VALUES ('Smith'), ('Johnson'), ('Williams'), ('Brown'), ('Jones'), ('Garcia'), ('Miller'), ('Davis'), ('Rodriguez'), ('Martinez'), ('Hernandez'), ('Lopez'), ('Gonzalez'), ('Wilson'), ('Anderson'), ('Thomas'), ('Taylor'), ('Moore'), ('Jackson'), ('Martin'), ('Lee'), ('Perez'), ('Thompson'), ('White'), ('Harris'), ('Sanchez'), ('Clark'), ('Ramirez'), ('Lewis'), ('Robinson'), ('Walker'), ('Young'), ('Allen'), ('King'), ('Wright'), ('Scott'), ('Torres'), ('Peterson'), ('Phillips'), ('Campbell'), ('Parker');
|
||||
|
||||
WHILE @ContactIndex <= 500
|
||||
BEGIN
|
||||
SELECT @AccountId = accountId FROM cdm.Account ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SELECT @ContactOwnerId = userId FROM cdm.[User] ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
|
||||
INSERT INTO cdm.Contact
|
||||
(firstName, lastName, email, phone, mobilePhone, accountId, ownerUserId, jobTitle, department, isActive)
|
||||
VALUES
|
||||
((SELECT TOP 1 name FROM @FirstNames ORDER BY NEWID()),
|
||||
(SELECT TOP 1 name FROM @LastNames ORDER BY NEWID()),
|
||||
'contact' + CAST(@ContactIndex AS VARCHAR(5)) + '@customer.com',
|
||||
'555-' + RIGHT('0000' + CAST(3000 + @ContactIndex AS VARCHAR(5)), 4),
|
||||
'555-' + RIGHT('0000' + CAST(7000 + @ContactIndex AS VARCHAR(5)), 4),
|
||||
@AccountId,
|
||||
@ContactOwnerId,
|
||||
CHOOSE(@ContactIndex % 8 + 1, 'Manager', 'Director', 'Supervisor', 'Coordinator', 'Specialist', 'Analyst', 'Administrator', 'Executive'),
|
||||
CHOOSE(@ContactIndex % 6 + 1, 'Operations', 'IT', 'Finance', 'HR', 'Sales', 'Support'),
|
||||
1);
|
||||
|
||||
SET @ContactIndex = @ContactIndex + 1;
|
||||
END
|
||||
|
||||
PRINT 'Contacts generated: 500';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE SERVICES (25 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 25 Services...';
|
||||
|
||||
INSERT INTO cdm.Service (serviceName, description, isActive, createdBy)
|
||||
SELECT 'Technical Support', 'On-demand technical support', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Installation Service', 'Professional installation', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Maintenance & Updates', 'Regular maintenance', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Training & Consulting', 'Professional training', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Premium Support', '24/7 premium support', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Implementation', 'System implementation', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Data Migration', 'Data migration services', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Security Services', 'Security assessment', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Performance Tuning', 'System optimization', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Backup & Recovery', 'Backup services', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Integration Services', 'System integration', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Custom Development', 'Custom solutions', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Infrastructure Management', 'Infrastructure support', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Cloud Services', 'Cloud deployment', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Mobile Services', 'Mobile app support', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'API Development', 'API development', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Testing Services', 'QA and testing', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Documentation', 'Technical documentation', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Change Management', 'Change management', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Strategic Planning', 'IT strategy consulting', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Compliance Services', 'Compliance management', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Disaster Recovery', 'DR planning and implementation', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'User Management', 'User administration', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Monitoring Services', 'System monitoring', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID() UNION ALL
|
||||
SELECT 'Automation Services', 'Process automation', 1, TOP 1 userId FROM cdm.[User] ORDER BY NEWID();
|
||||
|
||||
PRINT 'Services generated: 25';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE RESOURCES (80 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 80 Resources...';
|
||||
|
||||
-- Generate user resources
|
||||
INSERT INTO cdm.Resource (resourceName, description, resourceType, userId, isActive, createdBy)
|
||||
SELECT
|
||||
'Support Technician - ' + CAST(ROW_NUMBER() OVER (ORDER BY u.userId) AS VARCHAR(3)),
|
||||
'Senior support technician',
|
||||
'User',
|
||||
u.userId,
|
||||
1,
|
||||
(SELECT TOP 1 userId FROM cdm.[User] ORDER BY NEWID())
|
||||
FROM cdm.[User] u
|
||||
WHERE u.isActive = 1;
|
||||
|
||||
-- Generate facility resources
|
||||
INSERT INTO cdm.Resource (resourceName, description, resourceType, isActive, createdBy)
|
||||
SELECT 'Conference Room ' + CHAR(64 + ROW_NUMBER() OVER (ORDER BY siteId)), 'Meeting facility', 'Facility', 1, (SELECT TOP 1 userId FROM cdm.[User] ORDER BY NEWID())
|
||||
FROM cdm.Site;
|
||||
|
||||
-- Generate equipment resources
|
||||
INSERT INTO cdm.Resource (resourceName, description, resourceType, isActive, createdBy)
|
||||
SELECT
|
||||
'Equipment ' + CAST(ROW_NUMBER() OVER (ORDER BY ROW_NUMBER() OVER (ORDER BY createdOn)) AS VARCHAR(3)),
|
||||
'Support workstation',
|
||||
'Equipment',
|
||||
1,
|
||||
(SELECT TOP 1 userId FROM cdm.[User] ORDER BY NEWID())
|
||||
FROM (SELECT TOP 30 createdOn FROM cdm.Site) AS s;
|
||||
|
||||
PRINT 'Resources generated: 80+';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE CONTRACTS (300 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 300 Contracts...';
|
||||
|
||||
DECLARE @ContractIndex INT = 1;
|
||||
DECLARE @ContractAccountId UNIQUEIDENTIFIER;
|
||||
DECLARE @ContractOwnerId UNIQUEIDENTIFIER;
|
||||
|
||||
WHILE @ContractIndex <= 300
|
||||
BEGIN
|
||||
SELECT @ContractAccountId = accountId FROM cdm.Account WHERE accountType = 'Customer' ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SELECT @ContractOwnerId = userId FROM cdm.[User] ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
|
||||
INSERT INTO cdm.Contract
|
||||
(contractNumber, contractName, accountId, ownerUserId, startDate, endDate, status, contractValue, contractType, isActive)
|
||||
VALUES
|
||||
('CNT-' + FORMAT(@ContractIndex, '000000'),
|
||||
'Contract ' + CAST(@ContractIndex AS VARCHAR(5)),
|
||||
@ContractAccountId,
|
||||
@ContractOwnerId,
|
||||
DATEADD(DAY, CAST(ABS(CHECKSUM(NEWID())) % 90 AS INT), @StartDate),
|
||||
DATEADD(DAY, CAST(ABS(CHECKSUM(NEWID())) % 90 AS INT) + 365, @StartDate),
|
||||
CHOOSE(@ContractIndex % 4 + 1, 'Active', 'Active', 'Draft', 'Expired'),
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 500000 + 10000 AS DECIMAL(18,2)),
|
||||
CHOOSE(@ContractIndex % 3 + 1, 'Support', 'Service', 'Maintenance'),
|
||||
1);
|
||||
|
||||
SET @ContractIndex = @ContractIndex + 1;
|
||||
END
|
||||
|
||||
PRINT 'Contracts generated: 300';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE CONTRACT LINES (900 total - 3 per contract)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 900 Contract Lines...';
|
||||
|
||||
INSERT INTO cdm.ContractLine (contractId, lineNumber, serviceId, description, quantityIncluded, quantityUsed, price)
|
||||
SELECT
|
||||
c.contractId,
|
||||
ROW_NUMBER() OVER (PARTITION BY c.contractId ORDER BY s.serviceId) AS lineNumber,
|
||||
s.serviceId,
|
||||
'Service: ' + s.serviceName,
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 500 + 10 AS INT),
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 300 AS INT),
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 50000 + 1000 AS DECIMAL(18,2))
|
||||
FROM cdm.Contract c
|
||||
CROSS JOIN (SELECT TOP 3 serviceId FROM cdm.Service ORDER BY NEWID()) s;
|
||||
|
||||
PRINT 'Contract Lines generated: 900+';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE ENTITLEMENTS (250 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 250 Entitlements...';
|
||||
|
||||
DECLARE @EntitlementIndex INT = 1;
|
||||
DECLARE @EntitlementAccountId UNIQUEIDENTIFIER;
|
||||
|
||||
WHILE @EntitlementIndex <= 250
|
||||
BEGIN
|
||||
SELECT @EntitlementAccountId = accountId FROM cdm.Account WHERE accountType = 'Customer' ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
|
||||
INSERT INTO cdm.Entitlement
|
||||
(entitlementName, description, accountId, startDate, endDate, type, duration, unitType, unitCount, status, isActive)
|
||||
VALUES
|
||||
('Entitlement ' + CAST(@EntitlementIndex AS VARCHAR(5)),
|
||||
'Support entitlement for account',
|
||||
@EntitlementAccountId,
|
||||
DATEADD(DAY, CAST(ABS(CHECKSUM(NEWID())) % 90 AS INT), @StartDate),
|
||||
DATEADD(DAY, CAST(ABS(CHECKSUM(NEWID())) % 90 AS INT) + 365, @StartDate),
|
||||
CHOOSE(@EntitlementIndex % 3 + 1, 'Support', 'Service', 'Training'),
|
||||
365,
|
||||
CHOOSE(@EntitlementIndex % 2 + 1, 'Cases', 'Hours'),
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 500 + 50 AS INT),
|
||||
CHOOSE(@EntitlementIndex % 5 + 1, 'Active', 'Active', 'Active', 'Inactive', 'Expired'),
|
||||
1);
|
||||
|
||||
SET @EntitlementIndex = @EntitlementIndex + 1;
|
||||
END
|
||||
|
||||
PRINT 'Entitlements generated: 250';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE CASES (2000 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 2000 Cases...';
|
||||
|
||||
DECLARE @CaseIndex INT = 1;
|
||||
DECLARE @CaseAccountId UNIQUEIDENTIFIER;
|
||||
DECLARE @CaseContactId UNIQUEIDENTIFIER;
|
||||
DECLARE @CaseOwnerId UNIQUEIDENTIFIER;
|
||||
DECLARE @CaseContractId UNIQUEIDENTIFIER;
|
||||
DECLARE @CaseEntitlementId UNIQUEIDENTIFIER;
|
||||
DECLARE @CaseCreatedDate DATETIME2;
|
||||
|
||||
WHILE @CaseIndex <= 2000
|
||||
BEGIN
|
||||
SELECT @CaseAccountId = accountId FROM cdm.Account ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SELECT @CaseContactId = contactId FROM cdm.Contact ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SELECT @CaseOwnerId = userId FROM cdm.[User] ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SELECT @CaseContractId = contractId FROM cdm.Contract WHERE accountId = @CaseAccountId ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SELECT @CaseEntitlementId = entitlementId FROM cdm.Entitlement WHERE accountId = @CaseAccountId ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SET @CaseCreatedDate = DATEADD(MINUTE, CAST(ABS(CHECKSUM(NEWID())) % (3 * 24 * 60) AS INT), @StartDate);
|
||||
|
||||
INSERT INTO cdm.[Case]
|
||||
(caseNumber, title, description, priority, severity, status, accountId, contactId, ownerUserId, contractId, entitlementId, createdDate, emailAddress, isActive)
|
||||
VALUES
|
||||
('CSE-' + FORMAT(@CaseIndex, '000000'),
|
||||
'Issue ' + CAST(@CaseIndex AS VARCHAR(5)),
|
||||
'Description for case ' + CAST(@CaseIndex AS VARCHAR(5)),
|
||||
CHOOSE(@CaseIndex % 5 + 1, 'Low', 'Low', 'Medium', 'High', 'Critical'),
|
||||
CHOOSE(@CaseIndex % 3 + 1, 'Low', 'Medium', 'High'),
|
||||
CHOOSE(@CaseIndex % 6 + 1, 'Active', 'Active', 'Active', 'Waiting', 'Resolved', 'Closed'),
|
||||
@CaseAccountId,
|
||||
@CaseContactId,
|
||||
@CaseOwnerId,
|
||||
@CaseContractId,
|
||||
@CaseEntitlementId,
|
||||
@CaseCreatedDate,
|
||||
(SELECT email FROM cdm.Contact WHERE contactId = @CaseContactId),
|
||||
1);
|
||||
|
||||
SET @CaseIndex = @CaseIndex + 1;
|
||||
|
||||
IF @CaseIndex % 100 = 0
|
||||
BEGIN
|
||||
PRINT 'Cases generated: ' + CAST(@CaseIndex AS VARCHAR(5));
|
||||
END
|
||||
END
|
||||
|
||||
PRINT 'Cases generated: 2000';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE SERVICE ACTIVITIES (3000 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 3000 Service Activities...';
|
||||
|
||||
DECLARE @ActivityIndex INT = 1;
|
||||
DECLARE @ActivityCaseId UNIQUEIDENTIFIER;
|
||||
DECLARE @ActivityServiceId UNIQUEIDENTIFIER;
|
||||
DECLARE @ActivityOwnerId UNIQUEIDENTIFIER;
|
||||
DECLARE @ActivityStartTime DATETIME2;
|
||||
DECLARE @ActivityEndTime DATETIME2;
|
||||
|
||||
WHILE @ActivityIndex <= 3000
|
||||
BEGIN
|
||||
SELECT @ActivityCaseId = caseId FROM cdm.[Case] ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SELECT @ActivityServiceId = serviceId FROM cdm.Service ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SELECT @ActivityOwnerId = userId FROM cdm.[User] ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SET @ActivityStartTime = DATEADD(MINUTE, CAST(ABS(CHECKSUM(NEWID())) % (3 * 24 * 60) AS INT), @StartDate);
|
||||
SET @ActivityEndTime = DATEADD(MINUTE, CAST(ABS(CHECKSUM(NEWID())) % 480 + 30 AS INT), @ActivityStartTime);
|
||||
|
||||
INSERT INTO cdm.ServiceActivity
|
||||
(subject, description, serviceId, caseId, ownerUserId, startTime, endTime, duration, location, status, isActive)
|
||||
VALUES
|
||||
('Activity ' + CAST(@ActivityIndex AS VARCHAR(5)),
|
||||
'Service activity description',
|
||||
@ActivityServiceId,
|
||||
@ActivityCaseId,
|
||||
@ActivityOwnerId,
|
||||
@ActivityStartTime,
|
||||
@ActivityEndTime,
|
||||
DATEDIFF(MINUTE, @ActivityStartTime, @ActivityEndTime),
|
||||
CHOOSE(@ActivityIndex % 3 + 1, 'Remote', 'On-site', 'Phone'),
|
||||
CHOOSE(@ActivityIndex % 4 + 1, 'Scheduled', 'In Progress', 'Completed', 'Cancelled'),
|
||||
1);
|
||||
|
||||
SET @ActivityIndex = @ActivityIndex + 1;
|
||||
|
||||
IF @ActivityIndex % 300 = 0
|
||||
BEGIN
|
||||
PRINT 'Service Activities generated: ' + CAST(@ActivityIndex AS VARCHAR(5));
|
||||
END
|
||||
END
|
||||
|
||||
PRINT 'Service Activities generated: 3000';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE TASKS (1000 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 1000 Tasks...';
|
||||
|
||||
DECLARE @TaskIndex INT = 1;
|
||||
DECLARE @TaskCaseId UNIQUEIDENTIFIER;
|
||||
DECLARE @TaskOwnerId UNIQUEIDENTIFIER;
|
||||
DECLARE @TaskDueDate DATE;
|
||||
|
||||
WHILE @TaskIndex <= 1000
|
||||
BEGIN
|
||||
SELECT @TaskCaseId = caseId FROM cdm.[Case] ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SELECT @TaskOwnerId = userId FROM cdm.[User] ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SET @TaskDueDate = DATEADD(DAY, CAST(ABS(CHECKSUM(NEWID())) % 60 AS INT), @EndDate);
|
||||
|
||||
INSERT INTO cdm.Task
|
||||
(subject, description, priority, status, dueDate, ownerUserId, caseId)
|
||||
VALUES
|
||||
('Task ' + CAST(@TaskIndex AS VARCHAR(5)),
|
||||
'Task description',
|
||||
CHOOSE(@TaskIndex % 3 + 1, 'Low', 'Medium', 'High'),
|
||||
CHOOSE(@TaskIndex % 4 + 1, 'Open', 'In Progress', 'Completed', 'Cancelled'),
|
||||
@TaskDueDate,
|
||||
@TaskOwnerId,
|
||||
@TaskCaseId);
|
||||
|
||||
SET @TaskIndex = @TaskIndex + 1;
|
||||
|
||||
IF @TaskIndex % 100 = 0
|
||||
BEGIN
|
||||
PRINT 'Tasks generated: ' + CAST(@TaskIndex AS VARCHAR(5));
|
||||
END
|
||||
END
|
||||
|
||||
PRINT 'Tasks generated: 1000';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE KNOWLEDGE ARTICLES (100 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 100 Knowledge Articles...';
|
||||
|
||||
DECLARE @ArticleIndex INT = 1;
|
||||
DECLARE @ArticleAuthorId UNIQUEIDENTIFIER;
|
||||
DECLARE @ArticlePublishedDate DATETIME2;
|
||||
|
||||
WHILE @ArticleIndex <= 100
|
||||
BEGIN
|
||||
SELECT @ArticleAuthorId = userId FROM cdm.[User] ORDER BY NEWID() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
|
||||
SET @ArticlePublishedDate = DATEADD(MINUTE, CAST(ABS(CHECKSUM(NEWID())) % (3 * 24 * 60) AS INT), @StartDate);
|
||||
|
||||
INSERT INTO cdm.KnowledgeArticle
|
||||
(title, content, category, keywords, authorUserId, status, publishedDate, viewCount, isActive)
|
||||
VALUES
|
||||
('Article ' + CAST(@ArticleIndex AS VARCHAR(5)),
|
||||
'Content for knowledge article ' + CAST(@ArticleIndex AS VARCHAR(5)) + '. This is a detailed technical article.',
|
||||
CHOOSE(@ArticleIndex % 10 + 1, 'Troubleshooting', 'How-To', 'Installation', 'Configuration', 'API', 'Security', 'Performance', 'Integration', 'Best Practices', 'FAQ'),
|
||||
'keywords, support, help',
|
||||
@ArticleAuthorId,
|
||||
CHOOSE(@ArticleIndex % 3 + 1, 'Published', 'Published', 'Draft'),
|
||||
CASE WHEN @ArticleIndex % 3 = 0 THEN @ArticlePublishedDate ELSE NULL END,
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 5000 AS INT),
|
||||
1);
|
||||
|
||||
SET @ArticleIndex = @ArticleIndex + 1;
|
||||
END
|
||||
|
||||
PRINT 'Knowledge Articles generated: 100';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE SLA KPI INSTANCES (3000 total - linked to cases)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 3000 SLA KPI Instances...';
|
||||
|
||||
INSERT INTO cdm.SLAKPIInstance (caseId, kpiName, metric, metricValue, metricUnit, targetValue, status)
|
||||
SELECT
|
||||
c.caseId,
|
||||
'Response Time',
|
||||
'Response Time',
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 240 + 15 AS DECIMAL(18,2)),
|
||||
'Minutes',
|
||||
60,
|
||||
CHOOSE(ABS(CHECKSUM(NEWID())) % 3 + 1, 'Compliant', 'Compliant', 'Non-Compliant')
|
||||
FROM cdm.[Case] c;
|
||||
|
||||
INSERT INTO cdm.SLAKPIInstance (caseId, kpiName, metric, metricValue, metricUnit, targetValue, status)
|
||||
SELECT
|
||||
c.caseId,
|
||||
'Resolution Time',
|
||||
'Resolution Time',
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 2880 + 240 AS DECIMAL(18,2)),
|
||||
'Minutes',
|
||||
1440,
|
||||
CHOOSE(ABS(CHECKSUM(NEWID())) % 4 + 1, 'Compliant', 'Compliant', 'Compliant', 'Non-Compliant')
|
||||
FROM cdm.[Case] c;
|
||||
|
||||
PRINT 'SLA KPI Instances generated: 3000+';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE CASE RESOLUTIONS (500 total - for closed/resolved cases)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 500 Case Resolutions...';
|
||||
|
||||
INSERT INTO cdm.CaseResolution (caseId, description, resolutionType, resolutionStatus, billingStatus, actualServiceDuration)
|
||||
SELECT TOP 500
|
||||
c.caseId,
|
||||
'Case resolved: ' + c.title,
|
||||
CHOOSE(ABS(CHECKSUM(NEWID())) % 3 + 1, 'Technical', 'Procedural', 'Escalation'),
|
||||
'Resolved',
|
||||
CHOOSE(ABS(CHECKSUM(NEWID())) % 2 + 1, 'Billable', 'Non-billable'),
|
||||
CAST(ABS(CHECKSUM(NEWID())) % 480 + 30 AS INT)
|
||||
FROM cdm.[Case] c
|
||||
WHERE c.status IN ('Closed', 'Resolved')
|
||||
ORDER BY NEWID();
|
||||
|
||||
PRINT 'Case Resolutions generated: 500';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE ENTITLEMENT CONTACTS (500 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 500 Entitlement Contacts...';
|
||||
|
||||
INSERT INTO cdm.EntitlementContact (entitlementId, contactId, isPrimary)
|
||||
SELECT TOP 500
|
||||
e.entitlementId,
|
||||
c.contactId,
|
||||
CASE WHEN ROW_NUMBER() OVER (PARTITION BY e.entitlementId ORDER BY NEWID()) = 1 THEN 1 ELSE 0 END
|
||||
FROM cdm.Entitlement e
|
||||
CROSS JOIN cdm.Contact c
|
||||
WHERE e.accountId = c.accountId
|
||||
ORDER BY NEWID();
|
||||
|
||||
PRINT 'Entitlement Contacts generated: 500';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE ENTITLEMENT PRODUCTS (750 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 750 Entitlement Products...';
|
||||
|
||||
INSERT INTO cdm.EntitlementProduct (entitlementId, serviceId)
|
||||
SELECT TOP 750
|
||||
e.entitlementId,
|
||||
s.serviceId
|
||||
FROM cdm.Entitlement e
|
||||
CROSS JOIN cdm.Service s
|
||||
ORDER BY NEWID();
|
||||
|
||||
PRINT 'Entitlement Products generated: 750';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE KNOWLEDGE ARTICLE INCIDENTS (1500 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 1500 Knowledge Article Incidents...';
|
||||
|
||||
INSERT INTO cdm.KnowledgeArticleIncident (articleId, caseId, isResolved)
|
||||
SELECT TOP 1500
|
||||
ka.articleId,
|
||||
c.caseId,
|
||||
CASE WHEN c.status IN ('Closed', 'Resolved') THEN 1 ELSE 0 END
|
||||
FROM cdm.KnowledgeArticle ka
|
||||
CROSS JOIN cdm.[Case] c
|
||||
ORDER BY NEWID();
|
||||
|
||||
PRINT 'Knowledge Article Incidents generated: 1500';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE SERVICE CONTRACT CONTACTS (800 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 800 Service Contract Contacts...';
|
||||
|
||||
INSERT INTO cdm.ServiceContractContact (contractId, contactId, role, isPrimary)
|
||||
SELECT TOP 800
|
||||
c.contractId,
|
||||
ct.contactId,
|
||||
CHOOSE(ABS(CHECKSUM(NEWID())) % 4 + 1, 'Primary', 'Secondary', 'Technical', 'Admin'),
|
||||
CASE WHEN ROW_NUMBER() OVER (PARTITION BY c.contractId ORDER BY NEWID()) = 1 THEN 1 ELSE 0 END
|
||||
FROM cdm.Contract c
|
||||
CROSS JOIN cdm.Contact ct
|
||||
WHERE c.accountId = ct.accountId
|
||||
ORDER BY NEWID();
|
||||
|
||||
PRINT 'Service Contract Contacts generated: 800';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- GENERATE ACTIVITY PARTIES (1500 total)
|
||||
-- ============================================================================
|
||||
PRINT 'Generating 1500 Activity Parties...';
|
||||
|
||||
INSERT INTO cdm.ActivityParty (activityId, partyType, userId, email)
|
||||
SELECT TOP 1500
|
||||
sa.activityId,
|
||||
CHOOSE(ABS(CHECKSUM(NEWID())) % 3 + 1, 'Required', 'Optional', 'Organizer'),
|
||||
u.userId,
|
||||
u.email
|
||||
FROM cdm.ServiceActivity sa
|
||||
CROSS JOIN cdm.[User] u
|
||||
ORDER BY NEWID();
|
||||
|
||||
PRINT 'Activity Parties generated: 1500';
|
||||
PRINT '';
|
||||
|
||||
-- ============================================================================
|
||||
-- SUMMARY AND STATISTICS
|
||||
-- ============================================================================
|
||||
|
||||
PRINT '';
|
||||
PRINT '========================================';
|
||||
PRINT 'Data Generation Complete!';
|
||||
PRINT '========================================';
|
||||
PRINT '';
|
||||
|
||||
SELECT
|
||||
'Users' AS Entity,
|
||||
COUNT(*) AS RecordCount
|
||||
FROM cdm.[User]
|
||||
UNION ALL
|
||||
SELECT 'Sites', COUNT(*) FROM cdm.Site
|
||||
UNION ALL
|
||||
SELECT 'Accounts', COUNT(*) FROM cdm.Account
|
||||
UNION ALL
|
||||
SELECT 'Contacts', COUNT(*) FROM cdm.Contact
|
||||
UNION ALL
|
||||
SELECT 'Services', COUNT(*) FROM cdm.Service
|
||||
UNION ALL
|
||||
SELECT 'Resources', COUNT(*) FROM cdm.Resource
|
||||
UNION ALL
|
||||
SELECT 'Contracts', COUNT(*) FROM cdm.Contract
|
||||
UNION ALL
|
||||
SELECT 'Contract Lines', COUNT(*) FROM cdm.ContractLine
|
||||
UNION ALL
|
||||
SELECT 'Entitlements', COUNT(*) FROM cdm.Entitlement
|
||||
UNION ALL
|
||||
SELECT 'Entitlement Contacts', COUNT(*) FROM cdm.EntitlementContact
|
||||
UNION ALL
|
||||
SELECT 'Entitlement Products', COUNT(*) FROM cdm.EntitlementProduct
|
||||
UNION ALL
|
||||
SELECT 'Cases', COUNT(*) FROM cdm.[Case]
|
||||
UNION ALL
|
||||
SELECT 'Service Activities', COUNT(*) FROM cdm.ServiceActivity
|
||||
UNION ALL
|
||||
SELECT 'Activity Parties', COUNT(*) FROM cdm.ActivityParty
|
||||
UNION ALL
|
||||
SELECT 'Tasks', COUNT(*) FROM cdm.Task
|
||||
UNION ALL
|
||||
SELECT 'Knowledge Articles', COUNT(*) FROM cdm.KnowledgeArticle
|
||||
UNION ALL
|
||||
SELECT 'Knowledge Article Incidents', COUNT(*) FROM cdm.KnowledgeArticleIncident
|
||||
UNION ALL
|
||||
SELECT 'SLA KPI Instances', COUNT(*) FROM cdm.SLAKPIInstance
|
||||
UNION ALL
|
||||
SELECT 'Case Resolutions', COUNT(*) FROM cdm.CaseResolution
|
||||
UNION ALL
|
||||
SELECT 'Service Contract Contacts', COUNT(*) FROM cdm.ServiceContractContact
|
||||
ORDER BY Entity;
|
||||
|
||||
PRINT '';
|
||||
PRINT '========================================';
|
||||
PRINT 'Database Statistics:';
|
||||
PRINT '========================================';
|
||||
PRINT '';
|
||||
|
||||
DECLARE @TotalRecords BIGINT = (
|
||||
SELECT COUNT(*) FROM cdm.[User] +
|
||||
COUNT(*) FROM cdm.Site +
|
||||
COUNT(*) FROM cdm.Account +
|
||||
COUNT(*) FROM cdm.Contact +
|
||||
COUNT(*) FROM cdm.Service +
|
||||
COUNT(*) FROM cdm.Resource +
|
||||
COUNT(*) FROM cdm.Contract +
|
||||
COUNT(*) FROM cdm.ContractLine +
|
||||
COUNT(*) FROM cdm.Entitlement +
|
||||
COUNT(*) FROM cdm.EntitlementContact +
|
||||
COUNT(*) FROM cdm.EntitlementProduct +
|
||||
COUNT(*) FROM cdm.[Case] +
|
||||
COUNT(*) FROM cdm.ServiceActivity +
|
||||
COUNT(*) FROM cdm.ActivityParty +
|
||||
COUNT(*) FROM cdm.Task +
|
||||
COUNT(*) FROM cdm.KnowledgeArticle +
|
||||
COUNT(*) FROM cdm.KnowledgeArticleIncident +
|
||||
COUNT(*) FROM cdm.SLAKPIInstance +
|
||||
COUNT(*) FROM cdm.CaseResolution +
|
||||
COUNT(*) FROM cdm.ServiceContractContact
|
||||
);
|
||||
|
||||
SELECT
|
||||
'Total Records Inserted' AS Metric,
|
||||
@TotalRecords AS Value
|
||||
UNION ALL
|
||||
SELECT 'Average Records per Case', (SELECT COUNT(*) FROM cdm.ServiceActivity) / (SELECT COUNT(*) FROM cdm.[Case])
|
||||
UNION ALL
|
||||
SELECT 'Average Cases per Account', (SELECT COUNT(*) FROM cdm.[Case]) / (SELECT COUNT(*) FROM cdm.Account)
|
||||
UNION ALL
|
||||
SELECT 'Average Contract Lines', (SELECT COUNT(*) FROM cdm.ContractLine) / (SELECT COUNT(*) FROM cdm.Contract);
|
||||
|
||||
PRINT '';
|
||||
PRINT 'Date Range: ' + CAST(@StartDate AS VARCHAR(10)) + ' to ' + CAST(@EndDate AS VARCHAR(10));
|
||||
PRINT '';
|
||||
PRINT 'All data has been generated successfully!';
|
||||
PRINT '========================================';
|
||||
|
||||
GO
|
||||
Reference in New Issue
Block a user