在SQL Server中创建测试数据

Kei*_*oom 9 sql-server testing

有没有人知道或者知道将为给定表生成测试数据的SQL脚本?

理想情况下,它将查看表的模式,并根据每列的数据类型创建包含测试数据的行.

如果这不存在,其他人会发现它有用吗?如果是这样的话,我会把手指伸出来写一个.

Kei*_*oom 14

好吧,我以为我会拉出手指,给自己写一个轻量级数据生成器:

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
Run Code Online (Sandbox Code Playgroud)

给定任何表,脚本将创建一个记录,其中包含类型的任意值; int,varchar,nvarchar,smalldatetime和bit.case语句可以用函数替换.它不会向下移动依赖关系,但它会跳过任何种子列.

我创建这个的动机是针对一个包含大约50列的表测试我的NHibernate映射文件,所以我在快速简单的脚本之后可以重复使用.


小智 7

您是否尝试过ApexSQL Generate:https://www.apexsql.com/sql_tools_generate.aspx ?

在我自己搜索类似的东西时偶然发现了它,它完成了很好的工作.这不是免费的,但是您可以获得所有可用功能的免费试用版,因此您可以在购买前试用.

我认为它可以很好地满足您的需求,因为它可以跟踪表,列类型甚至约束之间的关系(对于更复杂的数据库).

我喜欢(并且实际需要)的一件事是它具有实际名称,地址等的内置值.当查询创建的测试数据而不是获得随机字符串时,它有很大帮助.

此外,您可以导出到SQL(或其他几种格式)并随时使用创建的数据来重新填充数据库.


kem*_*002 5

红门软件有一个程序可以为你做这个.它被称为SQL数据生成器.