加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 在SQL Server中创建测试数据

发布时间:2020-12-12 08:47:27 所属栏目:MsSql教程 来源:网络整理
导读:有没有人拥有或知道一个SQL脚本将生成给定表的测试数据? 理想情况下,它将查看表的模式,并根据每列的数据类型创建具有测试数据的行. 如果这不存在,其他人会发现它有用吗?如果是这样,我会拉出我的手指写一个. 解决方法 那么我以为我会把我的手指拉出来,给自己
有没有人拥有或知道一个SQL脚本将生成给定表的测试数据?

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

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

解决方法

那么我以为我会把我的手指拉出来,给自己写一个轻量级的数据生成器:
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,@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列的表,所以我是一个快速的一个简单的脚本,可以重新使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读