Самый быстрый способ заполнить таблицу SQL фиктивными данными - PullRequest
30 голосов
/ 24 мая 2010

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

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

Спасибо!

Ответы [ 4 ]

44 голосов
/ 21 августа 2013

Рекомендовать бесплатный генератор лицензированных случайных пользовательских данных с лицензией GNU

18 голосов
/ 24 мая 2010

Генератор данных SQL от RedGate

Генерация данных в один клик

Реалистичные данные на основе имени столбца и таблицы

Данные можно настроить, еслитребуемый

Устраняет часы утомительной работы

Полная поддержка SQL Server 2008

10 голосов
/ 11 декабря 2015

Поздний ответ, но может быть полезен другим читателям этой темы. Помимо других решений, я могу порекомендовать импортировать данные из CSV-файла с использованием SSMS или пользовательских сценариев импорта SQL, программ. Существует пошаговое руководство о том, как это сделать, поэтому вы можете попробовать его: http://solutioncenter.apexsql.com/how-to-generate-randomized-test-data-from-a-csv-file/

Имейте в виду, что импортировать файл .csv с использованием SSMS или пользовательских сценариев импорта SQL проще, чем создавать вставки SQL вручную, но есть некоторые ограничения, как описано в руководстве:

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

В руководстве также объясняется, как использовать сторонний генератор данных SQL с именем ApexSQL Generate . Инструмент имеет встроенную функцию для генерации большого количества рандомизированных данных из импортированного файла в формате .csv. Приложение имеет полнофункциональную бесплатную пробную версию, так что вы можете скачать и попробовать его, чтобы увидеть, работает ли оно для вас.

3 голосов
/ 13 мая 2017

Вам нужно только Go 1000 после ВСТАВКИ, чтобы заполнить его 1000 раз, вот так:

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

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

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

В случае, если один или несколько столбцов являются идентичными (то есть они принимают уникальные значения, если он автоинкрементный), вы просто не помещаете его в свой запрос, например, если Id в dbo.Customer - это идентификатор, запрос выполняется как это:

INSERT INTO dbo.Customers
SELECT FirstName, Last Name FROM dbo.Customers
GO 10

Вместо:

INSERT INTO dbo.Customers
SELECT Id, FirstName, Last Name 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 to No, так как предполагается, что вы будете заполнять новую таблицу данными исходной.

  1. Запустите следующий запрос, он будет выполнен 1000 раз, вы можете изменить его на более или менее, но помните, что он может длиться в течение нескольких минут в зависимости от аппаратного обеспечения вашего компьютера:

INSERT INTO [dbo].[CustomersTest] SELECT * FROM [dbo].[Customers] GO 1000

  1. Через некоторое время у вас есть таблица с фиктивными строками!

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

Хорошим моментом является то, что RedGate идентифицирует внешние ключи, чтобы вы могли применять JOIN в своих запросах.

У вас есть куча опций, которые позволяют вам решить, как каждый столбец должен быть заполнен, каждый столбец ожидается семантически, так что предлагаются связанные данные, например, если у вас есть столбец с именем «Отдел», это не так. заполненный странными символами, он заполнен такими выражениями, как «Технические», «Веб», «Клиент» и т. д. Даже регулярное выражение можно использовать для ограничения выбранных символов.

Я заполнил свои таблицы более чем 10000000 записей, что было потрясающим симулятором.

...