Создать тестовые данные в SQL Server - PullRequest
9 голосов
/ 13 июля 2009

Кто-нибудь знает или знает сценарий SQL, который будет генерировать тестовые данные для данной таблицы?

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

Если этого не будет, найдет ли кто-нибудь еще это полезным? Если так, то я вытащу свой палец и напишу один.

Ответы [ 5 ]

13 голосов
/ 13 июля 2009

Ну, я думал, что вытащу свой палец и напишу себе легкий генератор данных:

declare @select varchar(max), @insert varchar(max), @column varchar(100),
    @type varchar(100), @identity bit, @db nvarchar(100)

set @db = N'Orders'
set @select = 'select '
set @insert = 'insert into ' + @db + ' ('


declare crD cursor fast_forward for
select column_name, data_type, 
COLUMNPROPERTY(
    OBJECT_ID(
       TABLE_SCHEMA + '.' + TABLE_NAME), 
    COLUMN_NAME, 'IsIdentity') AS COLUMN_ID
from Northwind.INFORMATION_SCHEMA.COLUMNS
where table_name = @db


open crD
fetch crD into @column, @type, @identity

while @@fetch_status = 0
begin
if @identity = 0 or @identity is null
begin
    set @insert = @insert + @column + ', ' 
    set @select = @select  + 
        case @type
            when 'int' then '1'
            when 'varchar' then '''test'''
            when 'nvarchar' then '''test'''
            when 'smalldatetime' then 'getdate()'
            when 'bit' then '0'
            else 'NULL'
        end + ', ' 
end
fetch crD into @column, @type, @identity
end 

set @select = left(@select, len(@select) - 1)
set @insert = left(@insert, len(@insert) - 1) + ')'
exec(@insert + @select)

close crD
deallocate crD

Для любой таблицы скрипт создаст одну запись с несколькими произвольными значениями для типов; int, varchar, nvarchar, smalldatetime и bit. Оператор case может быть заменен функцией. Он не будет перемещаться по зависимостям, но пропустит все заполненные столбцы.

Моя мотивация для создания этого состоит в том, чтобы протестировать мои файлы сопоставления NHibernate с таблицей с 50 столбцами, поэтому я быстро выбрал простой скрипт, который можно использовать повторно.

7 голосов
/ 17 декабря 2015

Вы пробовали ApexSQL Generate: https://www.apexsql.com/sql_tools_generate.aspx?

Я наткнулся на него во время собственного поиска подобного предмета, и он отлично справился со своей задачей. Это не бесплатно, но вы получаете бесплатную пробную версию со всеми доступными функциями, так что вы можете попробовать, прежде чем купить.

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

Одна вещь, которая мне понравилась (и на самом деле нуждалась), заключалась в том, что она имеет встроенные значения для фактических имен, адресов и т. Д. Это очень помогает при запросе созданных тестовых данных и не позволяет получить случайные строки.

Кроме того, вы можете экспортировать в SQL (или несколько других форматов) и использовать созданные данные в любое время для повторного заполнения базы данных.

5 голосов
/ 13 июля 2009

Существует программа из программного обеспечения red gate , которая сделает это за вас. Он называется Генератор данных SQL .

2 голосов
/ 13 июля 2009

Некоторые версии Visual Studio имеют встроенную функцию генерации данных. Если вы используете в нем проекты баз данных, вы можете создавать планы генерации данных. Вот статья MSDN

1 голос
/ 07 мая 2014

Я использовал следующий способ: он в основном копирует данные из себя, данные растут экспоненциально с каждым выполнением. Клават в том, что сначала вам нужно иметь некоторые данные образца, а также вы должны выполнить запрос, например, у меня было 327680 строк данных, когда Я начал с 10 строк данных. Выполняя запрос всего 16 раз. Выполните еще раз, и я вызову 655360 строк данных!

 insert into mytable select [col1], [col2], [col3] from mytable 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...