-- Simplified Bulk Data Generation - 100x More Data -- This approach focuses on generating meaningful test data efficiently USE CDM_CustomerService; GO PRINT '========================================'; PRINT 'Starting Simplified Bulk Data Generation'; PRINT '========================================'; PRINT ''; DECLARE @StartDate DATE = DATEADD(MONTH, -3, CAST(GETUTCDATE() AS DATE)); DECLARE @EndDate DATE = CAST(GETUTCDATE() AS DATE); -- ============================================================================ -- GENERATE ACCOUNTS (380 additional - total 400) -- ============================================================================ PRINT 'Generating 380 additional Accounts...'; DECLARE @i INT = 5; DECLARE @SiteId UNIQUEIDENTIFIER = (SELECT TOP 1 siteId FROM cdm.Site ORDER BY NEWID()); DECLARE @OwnerId UNIQUEIDENTIFIER = (SELECT TOP 1 userId FROM cdm.[User] ORDER BY NEWID()); WHILE @i <= 400 BEGIN INSERT INTO cdm.Account (accountName, accountNumber, email, phone, ownerUserId, siteId, accountType, industry, numberOfEmployees, revenue, isActive) VALUES ('Account ' + CAST(@i AS NVARCHAR(10)), 'ACC-' + RIGHT('0000' + CAST(@i AS VARCHAR(10)), 5), 'contact' + CAST(@i AS VARCHAR(10)) + '@customer.com', '555-' + CAST(2000 + @i AS VARCHAR(4)), (SELECT TOP 1 userId FROM cdm.[User] ORDER BY NEWID()), (SELECT TOP 1 siteId FROM cdm.Site ORDER BY NEWID()), CASE WHEN @i % 10 = 0 THEN 'Prospect' ELSE 'Customer' END, CHOOSE((@i % 10) + 1, 'Tech', 'Manuf', 'Finance', 'Health', 'Retail', 'Consult', 'Telecom', 'Education', 'Govt', 'Energy'), 100 + (@i * 3), 50000 + (@i * 100), 1); SET @i = @i + 1; IF @i % 50 = 0 PRINT ' Created ' + CAST(@i AS VARCHAR(10)) + ' accounts...'; END PRINT 'Accounts: 400 total'; PRINT ''; -- ============================================================================ -- GENERATE CONTACTS (480 additional - total 500) -- ============================================================================ PRINT 'Generating 480 additional Contacts...'; SET @i = 6; WHILE @i <= 500 BEGIN INSERT INTO cdm.Contact (firstName, lastName, email, phone, accountId, ownerUserId, jobTitle, department, isActive) VALUES ('User' + CAST(@i AS VARCHAR(10)), 'Contact' + CAST(@i AS VARCHAR(10)), 'user' + CAST(@i AS VARCHAR(10)) + '@customer.com', '555-' + CAST(3000 + @i AS VARCHAR(4)), (SELECT TOP 1 accountId FROM cdm.Account ORDER BY NEWID()), (SELECT TOP 1 userId FROM cdm.[User] ORDER BY NEWID()), CHOOSE((@i % 6) + 1, 'Manager', 'Director', 'Lead', 'Engineer', 'Analyst', 'Specialist'), CHOOSE((@i % 5) + 1, 'Operations', 'IT', 'Finance', 'Sales', 'Support'), 1); SET @i = @i + 1; IF @i % 100 = 0 PRINT ' Created ' + CAST(@i AS VARCHAR(10)) + ' contacts...'; END PRINT 'Contacts: 500 total'; PRINT ''; -- ============================================================================ -- GENERATE CONTRACTS (290 additional - total 300) -- ============================================================================ PRINT 'Generating 290 additional Contracts...'; SET @i = 11; WHILE @i <= 300 BEGIN INSERT INTO cdm.Contract (contractNumber, contractName, accountId, ownerUserId, startDate, endDate, status, contractValue, contractType, isActive) SELECT 'CNT-' + FORMAT(@i, '000000'), 'Contract' + CAST(@i AS VARCHAR(10)), (SELECT TOP 1 accountId FROM cdm.Account WHERE accountType = 'Customer' ORDER BY NEWID()), (SELECT TOP 1 userId FROM cdm.[User] ORDER BY NEWID()), DATEADD(DAY, (@i * 3) % 90, @StartDate), DATEADD(DAY, ((@i * 3) % 90) + 365, @StartDate), CASE WHEN (@i % 20) < 15 THEN 'Active' ELSE CASE WHEN (@i % 20) < 18 THEN 'Expired' ELSE 'Draft' END END, 10000 + (@i * 500), CHOOSE((@i % 3), 'Support', 'Service', 'Maintenance'); SET @i = @i + 1; IF @i % 50 = 0 PRINT ' Created ' + CAST(@i AS VARCHAR(10)) + ' contracts...'; END PRINT 'Contracts: 300 total'; PRINT ''; -- ============================================================================ -- GENERATE CASES (1996 additional - total 2000) -- ============================================================================ PRINT 'Generating 1996 additional Cases...'; SET @i = 5; DECLARE @CaseCreatedDate DATETIME2; DECLARE @TotalMinutes INT = DATEDIFF(MINUTE, @StartDate, @EndDate); WHILE @i <= 2000 BEGIN SET @CaseCreatedDate = DATEADD(MINUTE, ((@i * 7919) % @TotalMinutes), @StartDate); INSERT INTO cdm.[Case] (caseNumber, title, priority, severity, status, accountId, contactId, ownerUserId, createdDate, emailAddress, isActive) SELECT 'CSE-' + FORMAT(@i, '000000'), 'Case ' + CAST(@i AS VARCHAR(10)), CHOOSE((@i % 5), 'Low', 'Low', 'Medium', 'High', 'Critical'), CHOOSE((@i % 3), 'Low', 'Medium', 'High'), CHOOSE((@i % 6), 'Active', 'Active', 'Active', 'Waiting', 'Resolved', 'Closed'), (SELECT TOP 1 accountId FROM cdm.Account ORDER BY NEWID()), (SELECT TOP 1 contactId FROM cdm.Contact ORDER BY NEWID()), (SELECT TOP 1 userId FROM cdm.[User] ORDER BY NEWID()), @CaseCreatedDate, 'support@customer.com', 1; SET @i = @i + 1; IF @i % 200 = 0 PRINT ' Created ' + CAST(@i AS VARCHAR(10)) + ' cases...'; END PRINT 'Cases: 2000 total'; PRINT ''; -- ============================================================================ -- GENERATE SERVICE ACTIVITIES (2997 additional - total 3000) -- ============================================================================ PRINT 'Generating 2997 additional Service Activities...'; SET @i = 4; DECLARE @ActivityStart DATETIME2; DECLARE @ActivityEnd DATETIME2; WHILE @i <= 3000 BEGIN SET @ActivityStart = DATEADD(MINUTE, ((@i * 13) % @TotalMinutes), @StartDate); SET @ActivityEnd = DATEADD(HOUR, 2, @ActivityStart); INSERT INTO cdm.ServiceActivity (subject, serviceId, caseId, ownerUserId, startTime, endTime, duration, status, isActive) SELECT 'Activity' + CAST(@i AS VARCHAR(10)), (SELECT TOP 1 serviceId FROM cdm.Service ORDER BY NEWID()), (SELECT TOP 1 caseId FROM cdm.[Case] ORDER BY NEWID()), (SELECT TOP 1 userId FROM cdm.[User] ORDER BY NEWID()), @ActivityStart, @ActivityEnd, 120, CHOOSE((@i % 4), 'Scheduled', 'In Progress', 'Completed', 'Cancelled'), 1; SET @i = @i + 1; IF @i % 300 = 0 PRINT ' Created ' + CAST(@i AS VARCHAR(10)) + ' service activities...'; END PRINT 'Service Activities: 3000 total'; PRINT ''; -- ============================================================================ -- GENERATE TASKS (996 additional - total 1000) -- ============================================================================ PRINT 'Generating 996 additional Tasks...'; SET @i = 5; WHILE @i <= 1000 BEGIN INSERT INTO cdm.Task (subject, priority, status, dueDate, ownerUserId, caseId) SELECT 'Task' + CAST(@i AS VARCHAR(10)), CHOOSE((@i % 3), 'Low', 'Medium', 'High'), CHOOSE((@i % 4), 'Open', 'In Progress', 'Completed', 'Cancelled'), DATEADD(DAY, (@i % 30), @EndDate), (SELECT TOP 1 userId FROM cdm.[User] ORDER BY NEWID()), (SELECT TOP 1 caseId FROM cdm.[Case] ORDER BY NEWID()); SET @i = @i + 1; IF @i % 100 = 0 PRINT ' Created ' + CAST(@i AS VARCHAR(10)) + ' tasks...'; END PRINT 'Tasks: 1000 total'; PRINT ''; -- ============================================================================ -- GENERATE SLA KPI INSTANCES -- ============================================================================ PRINT 'Generating SLA KPI Instances for Cases...'; INSERT INTO cdm.SLAKPIInstance (caseId, kpiName, metric, metricValue, metricUnit, targetValue, status) SELECT c.caseId, 'First Response Time', 'Response', CAST((CAST(c.caseId AS BINARY(16)) ^ CAST(GETUTCDATE() AS BINARY(8))) AS INT) % 120 + 15, 'Minutes', 60, CASE WHEN (CAST(c.caseId AS BINARY(16)) ^ CAST(GETUTCDATE() AS BINARY(8))) AS INT) % 10 > 7 THEN 'Non-Compliant' ELSE 'Compliant' END FROM cdm.[Case] c WHERE c.isActive = 1; PRINT ''; PRINT '========================================'; PRINT 'Data Generation Summary:'; PRINT '========================================'; PRINT ''; SELECT 'Entity' AS Entity, 'Count' AS Count UNION ALL SELECT 'Accounts', CAST(COUNT(*) AS VARCHAR(10)) FROM cdm.Account UNION ALL SELECT 'Contacts', CAST(COUNT(*) AS VARCHAR(10)) FROM cdm.Contact UNION ALL SELECT 'Services', CAST(COUNT(*) AS VARCHAR(10)) FROM cdm.Service UNION ALL SELECT 'Contracts', CAST(COUNT(*) AS VARCHAR(10)) FROM cdm.Contract UNION ALL SELECT 'Cases', CAST(COUNT(*) AS VARCHAR(10)) FROM cdm.[Case] UNION ALL SELECT 'Service Activities', CAST(COUNT(*) AS VARCHAR(10)) FROM cdm.ServiceActivity UNION ALL SELECT 'Tasks', CAST(COUNT(*) AS VARCHAR(10)) FROM cdm.Task UNION ALL SELECT 'SLA KPI Instances', CAST(COUNT(*) AS VARCHAR(10)) FROM cdm.SLAKPIInstance; PRINT ''; PRINT 'Date Range: ' + CAST(@StartDate AS VARCHAR(10)) + ' to ' + CAST(@EndDate AS VARCHAR(10)); PRINT ''; PRINT '========================================'; PRINT 'All Data Generated Successfully!'; PRINT '========================================'; GO