Процедура для наполнения таблицы MS SQL SERVER

Необходимо заполнить таблицу customers 1 миллионом строк , а связанную таблицу Payments на каждого пользователя по 6 платежей. https://i.stack.imgur.com/PXiXV.jpg

Результат таблицы customers, не понимаю что творится с id https://i.stack.imgur.com/Vhkuu.jpg

А payments вообще не работает. https://i.stack.imgur.com/8Ud1N.jpg

Возможно дело во вложенном цикле, прошу подсказать оптимальное решение ибо не имею опыта в написании подобных процедур.


Ответы (1 шт):

Автор решения: Akina

Пример реализации указанной операции.

  1. Создание таблиц.
CREATE TABLE customers (cus_id INT IDENTITY(1,1) PRIMARY KEY,
                        name VARCHAR(255));
CREATE TABLE payments (pay_id INT IDENTITY(1,1) PRIMARY KEY,
                       cus_id INT,
                       amount INT,
                       FOREIGN KEY (cus_id) REFERENCES customers (cus_id));
  1. Создание (временного) триггера, который будет обеспечивать вставку связанных записей (по 2 штуки на одну основную запись).
CREATE TRIGGER tr
ON customers
AFTER INSERT
AS
WITH cte AS ( SELECT 1 num 
              UNION ALL
              SELECT num + 1 FROM cte WHERE num < 2 )
INSERT INTO payments (cus_id, amount)
SELECT INSERTED.cus_id, RAND(CHECKSUM(NEWID())) * 1000
FROM INSERTED
CROSS JOIN cte;
  1. Вставка данных в основную таблицу (5 штук). Триггер вставит связанные записи в зависимую.
WITH cte AS ( SELECT 1 num 
              UNION ALL
              SELECT num + 1 FROM cte WHERE num < 5 )
INSERT INTO customers (name)
SELECT CONVERT(VARCHAR(255), NEWID())
FROM cte;

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=c8903c8143c1fb39a1fda24c455751f6

→ Ссылка