网上论坛生成测试数据方法(抢分利器)
在网上回复问题时,生成测试数据是必不可少的
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
网上论坛生成测试数据方法(抢分利器)相关推荐
- 软件测试自动生成测试数据,软件测试中测试数据的自动生成方法浅析
一.引言 软件质量是制约计算机应用领域进一步发展的关键要素之一,保证软件质量.提高软件可靠性的重要手段是软件测试.软件测试中最关键的问题是测试数据的设计,它主要涉及两个方面,一是测试 数据生成,是测试 ...
- 基于asp.net网上论坛BBS毕业设计
获取项目源文件,联系Q:1415736481,可指导毕设,课设 摘要 随着Internet技术的飞速发展,论坛已经成为当今网络上不可或缺的一种交流方式之一.教育论坛通常如同一些教学类的博客.或者是教学 ...
- 【原创醒目】终极之决战CSDN专家分【抢分醒目】
专家分有什么难赚的? 1. 挑选人气旺.好赚分的版,比如.net技术呀,VC/MFC呀,软件使用之类的,并尽在人气够旺的基础上选择难度较高的.人气一旺,贴子就多,再加上难度高,肉多狼少,所以贴子的分数 ...
- 超级卵杰的自动脚本(3)签到 抢分 入团 压分功能。
基础已经好了.剩下功能都很简单.数据分析下就行了. 先是签到模块. 判断分钟如果是00 or 30就打出签到两字就行.为防止重复弹幕,所以在签到后加上当前时间. def sign():while 1: ...
- 调试与对拍(一):生成测试数据+对拍
今天打比赛时令小编很气愤,隔壁LSH有文件运行错误,重提了一遍老师就收,而小编重提却爱搭不理,于是小编决定还是自己造个数据把代码重测一遍,于是潜心钻研生成测试数据的方法. 其实很简单,用随机数生成器生 ...
- mysql 测试数据的脚本_Mysql脚本 生成测试数据
Mysql脚本 生成测试数据 使用: ./xie.sh -uroot -p'123456' #!/bin/bash #混合测试数据库脚本 #将创建一个single数据库,其中创建一个s1表 #如果数据 ...
- 通过 Python_Faker 生成测试数据
通过 Python_Faker 生成测试数据 一.介绍 在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,你不可能通过手工来生成(最傻的方法)可能 ...
- asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案--ZT
原文:http://www.sufeinet.com/thread-4564-1-1.html 这个问题我相信有不少人见过,就是使用系统的分页功能时,或者是使用系统控件,都会有一个回发的功能,这个功能 ...
- python生成测试数据_Python基于Hypothesis测试库生成测试数据
Hypothesis是Python的一个高级测试库.它允许编写测试用例时参数化,然后生成使测试失败的简单易懂的测试数据.可以用更少的工作在代码中发现更多的bug. 安装 pip install hyp ...
最新文章
- c语言选择题写小写字母表,C语言选择题(最全版).doc
- css样式中关于li的横向排列
- Matlab 图像分块(不重叠、重叠)
- java解决错误经验_在Java错误进入生产之前的新处理方式
- 【升级版】如何使用阿里云云解析API实现动态域名解析,搭建私有服务器【含可执行文件和源码】...
- Codeforces 773D Perishable Roads 最短路 (看题解)
- RealView MDK在链接时提示空间不够的解决方案总结
- CSS 的三个特性:层叠性、继承性、优先级
- LIRe 源代码分析 1:整体结构
- java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作
- iOS开发的几种加密方式
- Excel表格中保护公式不被修改
- 摄影构图学pdf_简单易懂,摄影小白也能Get的摄影技巧!
- android手机 usb hub,巧用USB HUB扩展OTG端口 让手机平板更超能
- php汽车租赁网站_ThinkPHP实战开发汽车租赁网站项目教程
- 系列微课|《Python程序设计(第3版)》第4章
- 小米应用市场隐私政策
- HLG 1916 小Z的卡片 (set 难题)恏似系亚洲区噶题
- 三小时,阿里云使用docker部署redis(阅文无数)
- IEEE754 浮点数:简读+案例=秒懂
热门文章
- 让数据可视化告诉你,中秋吃这样的月饼绝对没错
- SpringActionscript3 片断
- android 生成apk名字自动已,Jenkins打包android应用时自动签名apk详解
- linux php错误日志在哪里,宝塔的php错误日志在哪
- android 组件消失了,Android 12 2.2 开发者预览版发布:修复桌面小组件消失等问题...
- java 构造函数 单例_Java中的私有构造函数和单例类 - Break易站
- Vue练习(修改为自定义事件)
- 静态成员变量以及静态成员函数
- leetcode 273场周赛 Problem-C
- 计算机算法设计与分析 递归实现归并排序和非递归实现归并排序