0

Самый быстрый способ заполнить таблицу SQL тестовыми данными [закрыто]

1

Описание проблемы для StackOverflow

Вопрос закрыт Этот вопрос не соответствует требованиям к фокусировке. В данный момент он не принимает ответы.


Хотите улучшить этот вопрос? Обновите вопрос, чтобы он сосредоточился только на одной проблеме, отредактировав этот пост.

Закрыт 3 года назад.

Сообщество рассмотрело возможность повторного открытия этого вопроса 3 года назад и оставило его закрытым, так как первоначальные причины закрытия не были разрешены.


Вопрос: Какой самый быстрый способ заполнить таблицу SQL фиктивными данными?

У меня есть широкая таблица с около 40 полями различных типов (int, bit, varchar и т.д.), и мне нужно провести нагрузочное тестирование. Я использую SQL Server 2008.

2 ответ(ов)

0

Вам нужно использовать GO 1000 после вашего оператора INSERT, чтобы заполнить таблицу 1000 раз, как показано ниже:

INSERT INTO dbo.Customers(Id, FirstName, LastName) VALUES(1, 'Mohamed', 'Mousavi')
GO 1000

Это создаст таблицу с 1000 одинаковыми строками.

Другое решение - заполнить первые строки вашей таблицы некоторыми данными, а затем повторить начальные строки, чтобы заполнить следующие строки таблицы. Это означает, что вы заполняете свою таблицу автоматически:

INSERT INTO dbo.Customers
SELECT * FROM dbo.Customers 
GO 10

Если одна или несколько колонок являются идентификаторами (то есть принимают уникальные значения и автоматически увеличиваются), то вы не должны указывать их в вашем запросе. Например, если Id в dbo.Customers является идентификатором, то запрос будет выглядеть так:

INSERT INTO dbo.Customers
SELECT FirstName, LastName FROM dbo.Customers
GO 10

Вместо:

INSERT INTO dbo.Customers
SELECT Id, FirstName, LastName FROM dbo.Customers
GO 10

Иначе вы столкнетесь с ошибкой:

An explicit value for the identity column in table 'dbo.Customers' can only be specified when a column list is used and IDENTITY_INSERT is ON.

Примечание: Это своего рода арифметическая прогрессия, поэтому это займет некоторое время. Не используйте слишком большое число перед GO.

Если вы хотите получить таблицу с более сложным заполнением, вы можете сделать это таким же образом, выполнив простой запрос и следуя этим шагам:

  1. Выберите одну из ваших таблиц, которая имеет значительное количество строк, например, dbo.Customers.
  2. Щелкните правой кнопкой мыши и выберите Script Table as > Create To > New Query Editor Window.
  3. Назовите вашу новую таблицу, например, dbo.CustomersTest. Теперь вы можете выполнить запрос, чтобы создать новую таблицу с аналогичной структурой dbo.Customers.

Примечание: Убедитесь, что если в ней есть поле идентификатора, вы изменили его Identity Specification на No, так как вы собираетесь заполнять новую таблицу данными из оригинальной таблицы многократно.

  1. Выполните следующий запрос, который будет выполнен 1000 раз, вы можете изменить это число, однако имейте в виду, что это может занять несколько минут в зависимости от производительности вашего компьютера:
INSERT INTO [dbo].[CustomersTest] SELECT * FROM [dbo].[Customers] GO 1000
  1. Через некоторое время у вас будет таблица с фиктивными строками!

Как упомянул @SQLMenace, инструмент RedGate Data Generator является отличным решением для этой задачи, его стоимость составляет 369 долларов, но есть 14-дневный пробный период.

Положительный момент заключается в том, что RedGate распознает внешние ключи, поэтому вы можете использовать JOIN в ваших запросах.

У вас есть множество опций, позволяющих выбрать, как каждая колонка будет заполнена. Каждая колонка прогнозируется семантически, так что предлагаются связанные данные. Например, если у вас есть колонка с названием 'Department', она не будет заполнена странными символами, а будет содержать такие выражения, как "Technical", "Web", "Customer" и т. д. Вы даже можете использовать регулярные выражения, чтобы ограничить выбранные символы.

Я заполнил свои таблицы более чем 10,000,000 записей, и это была отличная симуляция.

0

Если вам нужно сгенерировать фиктивные данные, рекомендую использовать http://filldb.info/dummy/. Этот инструмент предлагает полные настройки, выбор количества генерируемых строк и "реальные" фиктивные данные, и всё это бесплатно.

Я не встречал ничего более эффективного или подходящего для таких задач.

С помощью данного ресурса вы можете создать целую базу данных или просто таблицу с удобным интерфейсом. Настройки и опции очень детализированы, что позволяет генерировать фиктивные данные практически без усилий. Интерфейс не имеет ограничений по размеру и предлагает широкий выбор типов данных.

Чтобы воспользоваться сервисом, перейдите по ссылке и вставьте SQL-команду, определяющую таблицы, или используйте их фиктивные таблицы. Затем нажмите "Далее" и укажите типы данных и настройки для заполнения фиктивными данными. После этого нажмите "Далее" и сгенерируйте данные. Погодите немного. Как только всё будет готово, скачайте базу данных и импортируйте её на свой сервер базы данных.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь