Самый быстрый способ заполнить таблицу SQL тестовыми данными [закрыто]
Описание проблемы для StackOverflow
Вопрос закрыт Этот вопрос не соответствует требованиям к фокусировке. В данный момент он не принимает ответы.
Хотите улучшить этот вопрос? Обновите вопрос, чтобы он сосредоточился только на одной проблеме, отредактировав этот пост.
Закрыт 3 года назад.
Сообщество рассмотрело возможность повторного открытия этого вопроса 3 года назад и оставило его закрытым, так как первоначальные причины закрытия не были разрешены.
Вопрос: Какой самый быстрый способ заполнить таблицу SQL фиктивными данными?
У меня есть широкая таблица с около 40 полями различных типов (int, bit, varchar и т.д.), и мне нужно провести нагрузочное тестирование. Я использую SQL Server 2008.
2 ответ(ов)
Вам нужно использовать 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
.
Если вы хотите получить таблицу с более сложным заполнением, вы можете сделать это таким же образом, выполнив простой запрос и следуя этим шагам:
- Выберите одну из ваших таблиц, которая имеет значительное количество строк, например,
dbo.Customers
. - Щелкните правой кнопкой мыши и выберите
Script Table as > Create To > New Query Editor Window
. - Назовите вашу новую таблицу, например,
dbo.CustomersTest
. Теперь вы можете выполнить запрос, чтобы создать новую таблицу с аналогичной структуройdbo.Customers
.
Примечание: Убедитесь, что если в ней есть поле идентификатора, вы изменили его Identity Specification
на No
, так как вы собираетесь заполнять новую таблицу данными из оригинальной таблицы многократно.
- Выполните следующий запрос, который будет выполнен 1000 раз, вы можете изменить это число, однако имейте в виду, что это может занять несколько минут в зависимости от производительности вашего компьютера:
INSERT INTO [dbo].[CustomersTest] SELECT * FROM [dbo].[Customers] GO 1000
- Через некоторое время у вас будет таблица с фиктивными строками!
Как упомянул @SQLMenace, инструмент RedGate Data Generator является отличным решением для этой задачи, его стоимость составляет 369 долларов, но есть 14-дневный пробный период.
Положительный момент заключается в том, что RedGate распознает внешние ключи, поэтому вы можете использовать JOIN в ваших запросах.
У вас есть множество опций, позволяющих выбрать, как каждая колонка будет заполнена. Каждая колонка прогнозируется семантически, так что предлагаются связанные данные. Например, если у вас есть колонка с названием 'Department', она не будет заполнена странными символами, а будет содержать такие выражения, как "Technical", "Web", "Customer" и т. д. Вы даже можете использовать регулярные выражения, чтобы ограничить выбранные символы.
Я заполнил свои таблицы более чем 10,000,000 записей, и это была отличная симуляция.
Если вам нужно сгенерировать фиктивные данные, рекомендую использовать http://filldb.info/dummy/. Этот инструмент предлагает полные настройки, выбор количества генерируемых строк и "реальные" фиктивные данные, и всё это бесплатно.
Я не встречал ничего более эффективного или подходящего для таких задач.
С помощью данного ресурса вы можете создать целую базу данных или просто таблицу с удобным интерфейсом. Настройки и опции очень детализированы, что позволяет генерировать фиктивные данные практически без усилий. Интерфейс не имеет ограничений по размеру и предлагает широкий выбор типов данных.
Чтобы воспользоваться сервисом, перейдите по ссылке и вставьте SQL-команду, определяющую таблицы, или используйте их фиктивные таблицы. Затем нажмите "Далее" и укажите типы данных и настройки для заполнения фиктивными данными. После этого нажмите "Далее" и сгенерируйте данные. Погодите немного. Как только всё будет готово, скачайте базу данных и импортируйте её на свой сервер базы данных.
Обновление данных в одной таблице из другой на основе совпадения ID
Как вставить перенос строки в строке VARCHAR/NVARCHAR SQL Server
Возможно ли задать условия в Count()?
Какой самый эффективный способ страницировать результаты в SQL Server?
Как оператор GROUP BY обрабатывает значения NULL?