`
javababy1
  • 浏览: 1166760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SQL用户数据自动生成测试用例(第一版)

阅读更多

好多的网友在SQL版问问题,一般我们要根据网友的数据自己手工创建表格,插入数据,本工具自动生成表格及数据,节省时间,才能抢到更多的分哦

比如:

我有如下数据:

IDNameSdate
1aa2009-01-01
2bb2009-01-01
3cc2009-01-01

如何select出结果,当然不会有人提这个问题的,这只是一个假设

使用本过程:

declare@svarchar(8000)
set@s='Ta
IDNameSdate
1aa2009-01-01
2bb2009-01-01
3cc2009-01-01
'
execsp_autoscript@s

就可以生成如下代码:

/**//*
--Author:Flystone
--Date:2008-05-15
--Version:V1.001
*/


--TestData:Ta
Ifobject_id('Ta')isnotnull
DroptableTa
Go
CreatetableTa(IDint,Namevarchar(2),Sdatesmalldatetime)
Go
InsertintoTa
select1,'aa','2009-01-01'unionall
select2,'bb','2009-01-01'unionall
select3,'cc','2009-01-01'
Go
--Start
Select*fromTa


--Result:
/**//*


*/

--End

是不是规范又快速呀,嘿嘿

部分内容网友自行修改,引用时请注明原作者

程序代码如下,欢迎大家指正(关于日期形如:yyyy-mm-dd HH:MM:ss 还在完善中,请关注.......)




--处理当前串中的空格,准备加入对时分秒的处理,时间末处理。。。。。。
createfunctionf_castdt(@svarchar(8000))
returnsvarchar(1000)
as
begin
set@s=ltrim(@s)
WHILECHARINDEX('',@s)>0
BEGIN
SET@s=replace(@s,'','')
END
return@s
end
go
--加一个分隔函数:
createfunctionF_split(
@svarchar(8000),--包含多个数据项的字符串
@posint,--要获取的数据项的位置
@splitvarchar(10)--数据分隔符
)RETURNSvarchar(100)
AS
BEGIN
IF@sISNULLRETURN(NULL)
DECLARE@splitlenint--分隔符长度
SELECT@splitlen=LEN(@split+'a')-2
WHILE@pos>1ANDcharindex(@split,@s+@split)>0
SELECT@pos=@pos-1,
@s=stuff(@s,1,charindex(@split,@s+@split)+@splitlen,'')
RETURN(replace((nullif(left(@s,charindex(@split,@s+@split)-1),'')),char(13),''))
END
GO

--判断当前串是有字母如果有那么当作varchar
createfunctionf_ischar(@svarchar(100))
returnsbit
as
begin

ifpatindex('%[a-zA-Z]%',@s)>0
return1
return0
end
go

--循环截取法
CREATEFUNCTIONf_splitSTR(
@svarchar(8000),--待分拆的字符串
@splitvarchar(20)--数据分隔符
)RETURNS@reTABLE(colvarchar(100))
AS
BEGIN
DECLARE@splitlenint
SET@splitlen=LEN(@split+'a')-2
WHILECHARINDEX(@split,@s)>0
BEGIN
INSERT@reVALUES(rtrim(ltrim(LEFT(@s,CHARINDEX(@split,@s)-1))))
SET@s=ltrim(STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,''))
END
INSERT@reVALUES(@s)
RETURN
END
GO


createprocsp_autoscript
@svarchar(8000)
as
setnocounton
declare@avarchar(8000),@bvarchar(8000),@cvarchar(8000)
set@a=ltrim(rtrim(left(@s,charindex(char(13),@s)-1)))
set@s=right(@s,len(@s)-charindex(char(13),@s)-1)
set@b=ltrim(rtrim(left(@s,charindex(char(13),@s)-1)))
set@s=right(@s,len(@s)-charindex(char(13),@s)-1)
set@c=ltrim(rtrim(left(@s,charindex(char(13),@s)-1)))
set@s=left(@s,len(@s)-1)

createtable#tmp1(pxintidentity(1,1),colvarchar(120),col2varchar(50),col3varchar(50))
createtable#tmp2(pxintidentity(1,1),colvarchar(120))
createtable#tmp3(pxintidentity(1,1),colvarchar(1000))
insertinto#tmp1(col)selectltrim(rtrim(col))fromf_splitSTR(@b,'')
insertinto#tmp2selectltrim(rtrim(col))fromf_splitSTR(@c,'')
insertinto#tmp3selectltrim(rtrim(col))fromf_splitSTR(@s,'
')

--取每一列的最大值,尽量让类型准确
--updatea
--setcol=c.col
--from#tmp2aleftjoin(
--selecta.px,max(dbo.F_split(b.col,a.px,''))ascol
--from#tmp2a,#tmp3b
--groupbya.px)cona.px=c.px


declare@pxint,@colvarchar(100),@maxidint
select@maxid=count(1)from#tmp1

DECLAREfCURSORFORSELECTpx,colFROM#tmp2
OPENf
FETCHNEXTFROMfINTO@px,@col

--IF@@FETCH_STATUS<>0

WHILE@@FETCH_STATUS=0
BEGIN
ifISDATE(@col)=1
iflen(@col)<=10
update#tmp1
setcol=col+'smalldatetime,',
col2
=casewhenpx=1then'select'''''else''''''end,
col3
=casewhenpx=@maxidthen'''''unionall'else''''','end
wherepx=@px
else
update#tmp1
setcol=col+'datetime,',
col2
=casewhenpx=1then'select'''''else''''''end,
col3
=casewhenpx=@maxidthen'''''unionall'color: #0
分享到:
评论

相关推荐

    Fuzzing_模糊测试--强制性安全漏洞发掘

    第6章 自动化测试和测试数据生成 6.1 自动化测试的价值 6.2 有用的工具和库 6.2.1ETHEREAL /WIRESHARK 6.2.2LIBDASM 和LIBDISASM 6.2.3LIBNET /LIBNETNT 6.2.4LIBPCAP 6.2.5METRO PACKET LIBRARY 6.2.6PTRACE ...

    测试培训教材

    把“调用”的测试步骤调整到第一步 查看需求覆盖率 -- Linking Requiremnets to a Test 将需求链接到测试Cruise Booking 注:由于Cruise Booking的测试是由Cruise Booking的需求转化而成的,所以需求覆盖中...

    禅道项目管理软件发布 v4.3 beta版本.zip

    872 测试用例导出的数据 没有用例的执行结果 871 测试人员创建bug的时候可以选择没有权限的项目,但是创建bug之后却看不到,导致重复提交 853 实现需求测试用例覆盖率功能 826 在禅道中提供api方面的实际例子 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    从1982年开始使用Oracle(第2版)。他当过开发人员,也做过DBA,目前是 Oracle ACE总监和OakTable成员。最近几年,他专注于研究Oracle内部原理以及解决性能问题。他的博客主页是 kerryosborne.oracle-guy.com。 ...

    Hibernate实战(第2版 中文高清版)

     4.3.1 动态的SQL生成   4.3.2 使实体不可变   4.3.3 给查询命名实体   4.3.4 声明包名称   4.3.5 用引号把SQL标识符括起来   4.3.6 实现命名约定   4.4 细粒度的模型和映射   4.4.1 映射基础属性  ...

    flex3的cookbook书籍完整版dpf(包含目录)

    第一章.Flex与ActionScript基础(3) 1.1节.用FlexBuilder创建Flex项目 1.2节.用FlexBuilder创建Flex库项目 1.3节.创建ActionScript项目 1.4节.在FlexBuilder中设置MXML编译器选项 1.5节.在FlexBuilder外部编译Flex...

    asp.net知识库

    直接从SQL语句问题贴子数据建表并生成建表语句的存储过程 从SQL中的一个表中导出HTML文件表格 获取數据库表的前N条记录 几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle ...

    go web编程

    第一部分 Go与Web应用 第1章 Go与Web应用 3 1.1 使用Go语言构建Web应用 3 1.1.1 Go与可扩展Web应用 4 1.1.2 Go与模块化Web应用 4 1.1.3 Go与可维护的Web应用 5 1.1.4 Go与高性能Web应用 5 ...

    。net图书管理系统设计方案

    数据表设计时,最好不要使用用户输入的信息作为主键,每一个数据表自己定义一个主键,添加信息是由程序自动添加,这样就可以减少数据更新时产生的错误。表与表相关联的外键最好是由程序自动生成的主键,这样数据库就...

    JAVA程序开发大全---上半部分

    7.2.11 自动生成SQL语句 113 7.3 JDBC应用实例:登录系统 114 7.4 本章小结 116 第8章 Struts框架的开发及应用 117 8.1 Struts框架概述 117 8.1.1 MVC设计模式 117 8.1.2 Struts框架工作原理 118 8.1.3 Struts框架...

    Activiti6.0教程例子下载

    3. RuntimeService:在Activiti中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。RuntimeService提供了启动流程、查询流程实例、设置获取流程实例变量等功能。此外它还提供了对流程部署,流程...

    程序员需要经常刷题吗-system-design-interview:系统设计面试

    需要程序员经常刷题吗表中的内容 ...例如,如果您被要求设计一个 url 缩短服务,请讨论: 生成并存储完整 url 的哈希值 MD5 和 Base62 哈希冲突 SQL 或 NoSQL 数据库模式 将散列 url 转换为完整 url 数据库查找 API

Global site tag (gtag.js) - Google Analytics