在网上回复问题时,生成测试数据是必不可少的

1.在master系统库生成存储过程方法

USE master
go
IF object_id('SP_Script') is not nulldrop proc SP_Script
go/****************************************************************************************************
%%存儲過程名:SP_Script
%%參數:@s 分拆符串,@Flag=1 指定列名 @Flag=0 自動生成列名
%%功能:%%備注@s格式:    空格以"~"替代,制表符以"`"替代,空值時以";"替代;用空格或制表符作為列的分隔,連續空格、制表符只計算一個,每一行結尾用不用輸入,如果在中間位置列為null時用";"替換%%20080527 增加了表變量,臨時表,正式表判斷 增加繁體簡體出現問號的問題。*****************************************************************************************************
%%編寫:Roy   2008-05-19
*****************************************************************************************************/
create proc SP_Script(@s nvarchar(Max),@Flag Bit=1)
as
declare @s2 nvarchar(Max),@Tab sysname,@ColName nvarchar(1000),@Print nvarchar(1000),@TabType nvarchar(100)
,@i int,@Col int,@TabID int,@IsDate Bit,@Isnumeric Bit,@Len int,@MaxLen int,@NewID Bit
,@Char Bit,@Type sysname,@IsChar Bit
select @i=charindex(char(13)+char(10),@s),@Tab=rtrim(left(@s,@i-1)),@s=stuff(@s,1,@i+1,''),
@Tab=left(@Tab,len(@Tab)-patindex('%[^'+char(9)+char(32)+']%',reverse(@Tab))+1)--得到表名if object_id('Tempdb..#') is not nulldrop table #
create table #(ID int identity,Col nvarchar(Max))if right(@s,2)!=char(13)+char(10)set @s=@s+char(13)+char(10)--替換中間空格為一個
select @i=patindex('%'+char(32)+char(32)+'%',@s)
while @i>0 select    @s=replace(@s,char(32)+char(32),char(32)),@i=patindex('%'+char(32)+char(32)+'%',@s)--替換中間空格+制表符為一個制表符
select @i=patindex('%'+char(32)+char(9)+'%',@s)
while @i>0  select @s=replace(@s,char(32)+char(9),char(9)),@i=patindex('%'+char(32)+char(9)+'%',@s)--替換中間制表符+空格為一個制表符
select @i=patindex('%'+char(9)+char(32)+'%',@s)
while @i>0  select @s=replace(@s,char(9)+char(32),char(9)),@i=patindex('%'+char(9)+char(32)+'%',@s)--去掉每一行開始的空格
select @i=patindex('%'+char(13)+char(10)+char(32)+'%',@s)
while @i>0 select @s=replace(@s,char(13)+char(10)+char(32),char(13)+char(10)),@i=patindex('%'+char(13)+char(10)+char(32)+'%',@s)--去掉每一行結束的空格
select @i=patindex('%'+char(32)+char(13)+char(10)+'%',@s)
while @i>0 select @s=replace(@s,char(32)+char(13)+char(10),char(13)+char(10)),@i=patindex('%'+char(32)+char(13)+char(10)+'%',@s)--去掉每一行開始的制表符
select @i=patindex('%'+char(13)+char(10)+char(9)+'%',@s)
while @i>0 select @s=replace(@s,char(13)+char(10)+char(9),char(13)+char(10)),@i=patindex('%'+char(13)+char(10)+char(9)+'%',@s)--去掉每一行結束的制表符
select @i=patindex('%'+char(9)+char(13)+char(10)+'%',@s)
while @i>0 select @s=replace(@s,char(9)+char(13)+char(10),char(13)+char(10)),@i=patindex('%'+char(9)+char(13)+char(10)+'%',@s)--替換空格為制表符
select @s=replace(@s,char(32),char(9))--替換中間制表符為1個
select @i=patindex('%'+char(9)+char(9)+'%',@s)
while @i>0 select @s=replace(@s,char(9)+char(9),char(9)),@i=patindex('%'+char(9)+char(9)+'%',@s)if @Flag=1
beginselect @i=charindex(char(13)+char(10),@s),@ColName=rtrim(left(@s,@i-1))+char(9),@s=stuff(@s,1,@i+1,'')
while patindex('%['+char(9)+char(32)+']%',@ColName)=1select @ColName=stuff(@ColName,1,1,'')
endselect @i=charindex(char(13)+char(10),@s),@s=@s+char(13)+char(10)while @i>0 and left(@s,@i-1)>''
begin select @s2=quotename(left(@s,@i-1),'''') ,@s=stuff(@s,1,charindex(char(13)+char(10),@s)+1,''),@i=charindex(char(13)+char(10),@s)set nocount onexec('insert # select N'+@s2)
end
--取列的類型
declare @T table(ID int,Col nvarchar(Max))set nocount on
insert @T select ID,Col+char(9) from #update # set Col=nullselect @Col=0
if @Flag=0set @ColName=''while (select max(len(Col)) from @T)>0
beginselect @IsDate=min(isdate(replace(replace(left(Col,charindex(char(9),Col)-1),'~',char(32)),'`',char(9)))),@isnumeric=min(case when charindex(',',left(Col,charindex(char(9),Col)-1))>0 or left(Col,charindex(char(9),Col)-1) like '0[^.]%'   then 0 else isnumeric(left(Col,charindex(char(9),Col)-1))end),@Len=max(Coalesce(len(right(left(Col,charindex(char(9),Col)-1),charindex('.',reverse(left(Col,charindex(char(9),Col)-1))))),0)),@MaxLen=max(len(left(Col,charindex(char(9),Col)-1))),@NewID=min(case when len(left(Col,charindex(char(9),Col)-1))=36 then 1 else 0 end),@Char=max(case when left(Col,charindex(char(9),Col)-1)='.' then 1 else 0 end),@Col=@Col+1 from @Twhere COl>''  and len(COl)>1and left(Col,charindex(char(9),Col)-1) not in(';','Null')if @IsDate=1select  @Type=CASE WHEN EXISTS(SELECT 1 FROM @T WHERE Col LIKE '%~%') THEN 'Datetime' ELSE 'Date' END,@IsChar=1
else IF @isnumeric=1 and @Char=0IF @Len>0select @Type='decimal(18,'+rtrim(@Len+5)+')',@IsChar=0else select @Type='int',@IsChar=0
else if @NewID=1select @Type='uniqueidentifier',@IsChar=1
elseselect @Type='nvarchar('+rtrim(@MaxLen+20)+')',@IsChar=1update a
set Col=Coalesce(a.Col+',','')+case    when b.COl ='' or left(b.Col,charindex(char(9),b.Col)-1) in(';','null') then 'null' when  @IsChar=1 then case when @IsDate=0 then 'N' else '' end +quotename(left(b.Col,charindex(char(9),b.Col)-1),'''') else left(b.Col,charindex(char(9),b.Col)-1) end
from # a
join@T b on a.ID=b.IDif @Flag=1set @ColName=stuff(@ColName,charindex(char(9),@ColName),1,']'+char(32)+@Type+',[')
elseset @ColName=@ColName+',[Col'+rtrim(@Col)+'] '+@Typeupdate @T set Col=stuff(Col,1,charindex(char(9),Col),'') where COl>''  and len(COl)>1
end
if @Flag=1set @ColName='['+left(@ColName,len(@ColName)-2)
elseset @ColName=stuff(@ColName,1,1,'')update # set Col=replace(replace(COl,'~',char(32)),'`',char(9))
set @ColName=replace(replace(@ColName,'~',char(32)),'`',char(9))
select @Col=1,@i=max(ID) from #
print 'use Tempdb'
print 'go'
print replicate(char(45)+char(45)+char(62)+char(32),2)--+N'(Roy)生成測試數據'
print ''
if left(@Tab,1)='@' print 'declare '+@Tab+' table('+@ColName+')'
else begin if left(@Tab,1)='#'set @TabType='Tempdb..'else set @TabType=''print 'if not object_id(N'''+@TabType+@Tab+''') is null'print char(9)+'drop table '+@Tabprint 'Go'print   'Create table '+@Tab+'('+@ColName+')'end
print 'Insert '+@Tab
while exists(select 1 from #)
begin select @Print='select '+Col+case when ID=@i then '' else ' union all' end from # where ID=@Coldelete # where ID=@Colprint @Printset @COl=@COl+1
end
if left(@Tab,1)<>'@'
print 'Go'
else
print ' '
print 'Select * from '+@TabGO
exec sp_ms_marksystemobject 'SP_Script'--添加在系统存储过程目录

2.调用方法

空格时要用~符号填充

2.1、临时表

e.g.

declare @s nvarchar(max)
set @s=N'#T
id     value   time                   meterId
1      10       2016-01-01~08:00      m0001
2      11       2016-01-03~08:00      m0001
3      20       2016-01-06~08:00      m0002
4      30       2016-01-07~08:00      m0002
5      40       2016-01-09~08:00      m0002
'
exec SP_Script @s
/*
use Tempdb
go
--> --> if not object_id(N'Tempdb..#T') is nulldrop table #T
Go
Create table #T([id] int,[value] int,[time] Datetime,[meterId] nvarchar(25))
Insert #T
select 1,10,'2016-01-01 08:00',N'm0001' union all
select 2,11,'2016-01-03 08:00',N'm0001' union all
select 3,20,'2016-01-06 08:00',N'm0002' union all
select 4,30,'2016-01-07 08:00',N'm0002' union all
select 5,40,'2016-01-09 08:00',N'm0002'
Go
Select * from #T
*/

2.2、表变量

e.g.

declare @s nvarchar(max)
set @s=N'@T
id     value   time                   meterId
1      10       2016-01-01~08:00      m0001
2      11       2016-01-03~08:00      m0001
3      20       2016-01-06~08:00      m0002
4      30       2016-01-07~08:00      m0002
5      40       2016-01-09~08:00      m0002
'
exec SP_Script @s
/*
use Tempdb
go
--> --> declare @T table([id] int,[value] int,[time] Datetime,[meterId] nvarchar(25))
Insert @T
select 1,10,'2016-01-01 08:00',N'm0001' union all
select 2,11,'2016-01-03 08:00',N'm0001' union all
select 3,20,'2016-01-06 08:00',N'm0002' union all
select 4,30,'2016-01-07 08:00',N'm0002' union all
select 5,40,'2016-01-09 08:00',N'm0002'Select * from @T*/

3.3、表

declare @s nvarchar(max)
set @s=N'T
id     value   time                   meterId
1      10       2016-01-01~08:00      m0001
2      11       2016-01-03~08:00      m0001
3      20       2016-01-06~08:00      m0002
4      30       2016-01-07~08:00      m0002
5      40       2016-01-09~08:00      m0002
'
exec SP_Script @s
/*
use Tempdb
go
--> --> if not object_id(N'T') is nulldrop table T
Go
Create table T([id] int,[value] int,[time] Datetime,[meterId] nvarchar(25))
Insert T
select 1,10,'2016-01-01 08:00',N'm0001' union all
select 2,11,'2016-01-03 08:00',N'm0001' union all
select 3,20,'2016-01-06 08:00',N'm0002' union all
select 4,30,'2016-01-07 08:00',N'm0002' union all
select 5,40,'2016-01-09 08:00',N'm0002'
Go
Select * from T*/

有特殊格式不支持可能不支持,大家有兴趣可方法上调整不能处理的格式

转载于:https://www.cnblogs.com/Roy_88/archive/2008/06/19/5463102.html

网上论坛生成测试数据方法(抢分利器)相关推荐

  1. 软件测试自动生成测试数据,软件测试中测试数据的自动生成方法浅析

    一.引言 软件质量是制约计算机应用领域进一步发展的关键要素之一,保证软件质量.提高软件可靠性的重要手段是软件测试.软件测试中最关键的问题是测试数据的设计,它主要涉及两个方面,一是测试 数据生成,是测试 ...

  2. 基于asp.net网上论坛BBS毕业设计

    获取项目源文件,联系Q:1415736481,可指导毕设,课设 摘要 随着Internet技术的飞速发展,论坛已经成为当今网络上不可或缺的一种交流方式之一.教育论坛通常如同一些教学类的博客.或者是教学 ...

  3. 【原创醒目】终极之决战CSDN专家分【抢分醒目】

    专家分有什么难赚的? 1. 挑选人气旺.好赚分的版,比如.net技术呀,VC/MFC呀,软件使用之类的,并尽在人气够旺的基础上选择难度较高的.人气一旺,贴子就多,再加上难度高,肉多狼少,所以贴子的分数 ...

  4. 超级卵杰的自动脚本(3)签到 抢分 入团 压分功能。

    基础已经好了.剩下功能都很简单.数据分析下就行了. 先是签到模块. 判断分钟如果是00 or 30就打出签到两字就行.为防止重复弹幕,所以在签到后加上当前时间. def sign():while 1: ...

  5. 调试与对拍(一):生成测试数据+对拍

    今天打比赛时令小编很气愤,隔壁LSH有文件运行错误,重提了一遍老师就收,而小编重提却爱搭不理,于是小编决定还是自己造个数据把代码重测一遍,于是潜心钻研生成测试数据的方法. 其实很简单,用随机数生成器生 ...

  6. mysql 测试数据的脚本_Mysql脚本 生成测试数据

    Mysql脚本 生成测试数据 使用: ./xie.sh -uroot -p'123456' #!/bin/bash #混合测试数据库脚本 #将创建一个single数据库,其中创建一个s1表 #如果数据 ...

  7. 通过 Python_Faker 生成测试数据

    通过 Python_Faker 生成测试数据 一.介绍 在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,你不可能通过手工来生成(最傻的方法)可能 ...

  8. asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案--ZT

    原文:http://www.sufeinet.com/thread-4564-1-1.html 这个问题我相信有不少人见过,就是使用系统的分页功能时,或者是使用系统控件,都会有一个回发的功能,这个功能 ...

  9. python生成测试数据_Python基于Hypothesis测试库生成测试数据

    Hypothesis是Python的一个高级测试库.它允许编写测试用例时参数化,然后生成使测试失败的简单易懂的测试数据.可以用更少的工作在代码中发现更多的bug. 安装 pip install hyp ...

最新文章

  1. c语言选择题写小写字母表,C语言选择题(最全版).doc
  2. css样式中关于li的横向排列
  3. Matlab 图像分块(不重叠、重叠)
  4. java解决错误经验_在Java错误进入生产之前的新处理方式
  5. 【升级版】如何使用阿里云云解析API实现动态域名解析,搭建私有服务器【含可执行文件和源码】...
  6. Codeforces 773D Perishable Roads 最短路 (看题解)
  7. RealView MDK在链接时提示空间不够的解决方案总结
  8. CSS 的三个特性:层叠性、继承性、优先级
  9. LIRe 源代码分析 1:整体结构
  10. java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作
  11. iOS开发的几种加密方式
  12. Excel表格中保护公式不被修改
  13. 摄影构图学pdf_简单易懂,摄影小白也能Get的摄影技巧!
  14. android手机 usb hub,巧用USB HUB扩展OTG端口 让手机平板更超能
  15. php汽车租赁网站_ThinkPHP实战开发汽车租赁网站项目教程
  16. 系列微课|《Python程序设计(第3版)》第4章
  17. 小米应用市场隐私政策
  18. HLG 1916 小Z的卡片 (set 难题)恏似系亚洲区噶题
  19. 三小时,阿里云使用docker部署redis(阅文无数)
  20. IEEE754 浮点数:简读+案例=秒懂

热门文章

  1. 让数据可视化告诉你,中秋吃这样的月饼绝对没错
  2. SpringActionscript3 片断
  3. android 生成apk名字自动已,Jenkins打包android应用时自动签名apk详解
  4. linux php错误日志在哪里,宝塔的php错误日志在哪
  5. android 组件消失了,Android 12 2.2 开发者预览版发布:修复桌面小组件消失等问题...
  6. java 构造函数 单例_Java中的私有构造函数和单例类 - Break易站
  7. Vue练习(修改为自定义事件)
  8. 静态成员变量以及静态成员函数
  9. leetcode 273场周赛 Problem-C
  10. 计算机算法设计与分析 递归实现归并排序和非递归实现归并排序