Advertisement
ProgNeo

Untitled

Dec 8th, 2023 (edited)
910
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.90 KB | None | 0 0
  1. --Генератор Студентов
  2. CREATE TABLE #Name —Временная таблица для выгрузки имен
  3. (
  4. Имя VARCHAR(255),
  5.  
  6. )
  7. CREATE TABLE #SurName —Временная таблица для выгрузки фамилий
  8. (
  9. Фамилия VARCHAR(255),
  10.  
  11. )
  12. --Выгрузка имен
  13. BULK INSERT #Name
  14. FROM 'C:\Users\Алина\OneDrive\Рабочий стол\УД4\4\names_rus.txt'
  15. WITH (
  16. firstrow=1,
  17. rowterminator = ';');
  18. select *from #Name
  19. --Выгрузка фамилий
  20. BULK INSERT #SurName
  21. FROM 'C:\Users\Алина\OneDrive\Рабочий стол\УД4\4\surnames_rus.txt'
  22. WITH (
  23. firstrow=1,
  24. rowterminator = ';');
  25. select *from #SurName
  26.  
  27. -- Генерирование 10 групп (хотя бы проверить столько, а там уже поменять явно не проблема)
  28. DECLARE @groupCount int = 10;
  29.  
  30. WHILE @groupCount > 0
  31. BEGIN
  32.     -- Создание группы
  33.     INSERT INTO dbo.Группы (Год_поступления, Шифр) VALUES (
  34.         FLOOR(20 + RAND() * (24 - 20 + 1)),
  35.         'ИСТб'
  36.     );
  37.  
  38.     -- Генерация 30 студентов для текущей группы
  39.     DECLARE @studentCount int = 30;
  40.     DECLARE @currentStudent int = 1;
  41.  
  42.     WHILE @currentStudent <= @studentCount
  43.     BEGIN
  44.         -- Создание студента
  45.         INSERT INTO dbo.Студенты (Группа_Номер, ФИО, Дата_рождения) VALUES (
  46.             IDENT_CURRENT('dbo.Группы'), -- Номер группы получается из последней вставленной записи
  47.             (SELECT TOP 1 Имя FROM #Name ORDER BY NEWID()) + ' ' + (SELECT TOP 1 Фамилия FROM #SurName ORDER BY NEWID()),
  48.             -- Дата рождения от 2002 до 2005
  49.             DATEADD(d, ROUND(DATEDIFF(d, '2002-01-01', '2005-12-31') * RAND(), 2), '2002-01-01')
  50.         );
  51.  
  52.         -- Генерация 3 оценок для текущего студента
  53.         DECLARE @gradeCount int = 3;
  54.         DECLARE @currentGrade int = 1;
  55.  
  56.         WHILE @currentGrade <= @gradeCount
  57.         BEGIN
  58.             -- Создание оценки
  59.             INSERT INTO dbo.Аттестация (Студенты_Номер_зачетки, ID_Предмета, Оценка) VALUES (
  60.                 IDENT_CURRENT('dbo.Студенты'),
  61.                 -- Выбираем случайный предмет
  62.                 (SELECT TOP 1 ID FROM dbo.Предметы ORDER BY NEWID()),
  63.                 -- Случайная оценка от 3 до 6
  64.                 RAND() * (6 - 3) + 3
  65.             );
  66.  
  67.             SET @currentGrade = @currentGrade + 1;
  68.         END;
  69.  
  70.         SET @currentStudent = @currentStudent + 1;
  71.     END;
  72.  
  73.     SET @groupCount = @groupCount - 1;
  74. END;
  75.  
  76. -- Очистка временных таблиц
  77. DROP TABLE #Name;
  78. DROP TABLE #SurName;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement