您的位置:首页 > 数据库

SQL Server搭建模拟环境进行测试

2008-04-24 20:08 381 查看
接触数据库早期写的东西,初学者可以看看。 一、接口部分


SET ANSI_NULLS ON


GO


SET QUOTED_IDENTIFIER ON


GO


IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[PrMatch_Construct]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)


BEGIN


EXEC dbo.sp_executesql @statement = N'-- =============================================


-- Author: <whbo>


-- Create date: <061222>


-- Description: <模拟大赛测试环境>


-- =============================================


create proc [dbo].[PrMatch_Construct]


@strTabName varchar(32),--表名


@i int,--迭代子


@intMax int--最大迭代


as


set nocount on


begin


declare @sql varchar(1024)


while (@i<=@intMax)


begin


set @sql = ''create table ''+@strTabName+cast(@i as varchar)+''(UserID int,Amount int)''


exec(@sql)


if (@@Error<>0) print @i


set @i = @i + 1


end


end'


END


GO


SET ANSI_NULLS ON


GO


SET QUOTED_IDENTIFIER ON


GO


IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[PrMatch_AddRecord]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)


BEGIN


EXEC dbo.sp_executesql @statement = N'


-- =============================================


-- Author: <whbo>


-- Create date: <061222>


-- Description: <模拟大赛添加测试数据>


-- =============================================


CREATE proc [dbo].[PrMatch_AddRecord]


@strTabName varchar(32),--表名


@i int,--迭代子


@intMax int--最大迭代


as


set nocount on


begin


declare @sql varchar(1024)


while (@i<=@intMax)


begin


set @sql = ''insert into ''+@strTabName+cast(@i as varchar) +


''(UserID ,Amount)''+


'' select 100,1 ''+''union select 101,2 ''+''union select 101,3''


exec(@sql)


if (@@Error<>0) print @i


set @i = @i + 1


end


end


'


END


GO


SET ANSI_NULLS ON


GO


SET QUOTED_IDENTIFIER ON


GO


IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[PrMatch_CheckEnvironment]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)


BEGIN


EXEC dbo.sp_executesql @statement = N'


-- =============================================


-- Author: <whbo>


-- Create date: <061222>


-- Description: <模拟大赛检查环境>


-- =============================================


CREATE proc [dbo].[PrMatch_CheckEnvironment]


@strTabName varchar(32),--表名


@i int,--迭代子


@intMax int--最大迭代


--@strErrMsg varchar(120) output


as


set nocount on


begin


declare @sql varchar(1024)


while (@i<=@intMax)


begin


set @sql =''if not exists(select 1 from sysobjects where name = ''''''+


@strTabName+cast(@i as varchar)+


'''''') print ''''错误:''+@strTabName+


cast(@i as varchar)+''缺少''''''


exec(@sql)


set @i = @i + 1


end


end


'


END


GO


SET ANSI_NULLS ON


GO


SET QUOTED_IDENTIFIER ON


GO


IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[PrMatch_DropEnvironment]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)


BEGIN


EXEC dbo.sp_executesql @statement = N'-- =============================================


-- Author: <whbo>


-- Create date: <061222>


-- Description: <模拟大赛测试环境删除>


-- =============================================


create proc [dbo].[PrMatch_DropEnvironment]


@strTabName varchar(32),--表名


@i int,--迭代子


@intMax int--最大迭代


as


set nocount on


begin


declare @sql varchar(1024)


while (@i <=@intMax)


begin


set @sql = ''drop table ''+@strTabName+cast(@i as varchar)


exec(@sql)


set @i = @i+1


end


end'


END


GO


SET ANSI_NULLS ON


GO


SET QUOTED_IDENTIFIER ON


GO


IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[PrMatch_UpdateRecord]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)


BEGIN


EXEC dbo.sp_executesql @statement = N'


-- =============================================


-- Author: <whbo>


-- Create date: <061222>


-- Description: <模拟大赛更新数据>


-- =============================================


CREATE proc [dbo].[PrMatch_UpdateRecord]


@dtmBgnDate datetime --大赛开始日期


as


set nocount on


begin


--update userlist


if @dtmBgnDate is null


begin print ''请输入大赛开始日期!'' return end


if not exists(select 1 from sysobjects where name = ''UserList'')


begin print ''TABLE :UserList Not Exists!'' return end


if not exists(select 1 from sysobjects where name = ''UserLogin'')


begin print ''TABLE :UserLogin Not Exists!'' return end




update userlist set now_money=100000, --当前帐户余额


dyn_money=100000, --昨日帐户市值


fdyn_money=100000, --周一帐户市值


cnum=0, --平仓次数


volume=0, --成交量


smax_surplus=0 --单笔获利最高


if (@@Error=0) print ''TABLE : UserList Updated! Counts : ''+cast(@@RowCount as varchar)


--update userlogin


update userlogin set initTime=@dtmBgnDate


if (@@Error=0) print ''TABLE : UserLogin Updated! Counts : ''+cast(@@RowCount as varchar)


end


'


END


GO


SET ANSI_NULLS ON


GO


SET QUOTED_IDENTIFIER ON


GO


IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[PrMatch_DelRecord]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)


BEGIN


EXEC dbo.sp_executesql @statement = N'




-- =============================================


-- Author: <whbo>


-- Create date: <061222>


-- Description: <模拟大赛删除测试数据>


-- =============================================


CREATE proc [dbo].[PrMatch_DelRecord]


@strTabName varchar(32),--表名


@i int,--迭代子


@intMax int--最大迭代


as


set nocount on


begin


declare @sql varchar(1024)


while (@i <=@intMax)


begin


set @sql = ''delete from ''+@strTabName+cast(@i as varchar)


exec(@sql)


if (@@Error<>0) print @i


set @i = @i + 1


end


--Limit_History,Limit


if exists(select 1 from sysobjects where name =''limit'')


delete from Limit


if exists(select 1 from sysobjects where name =''limit_history'')


begin


delete from Limit_History


--Restore Limit_History`s identity seed to 0


DBCC CHECKIDENT(Limit_History,reseed,0)


end


end




'


END



二、调用方式


use xupan


--构造测试环境


--exec PrMatch_Construct 'no_close',0,99


--添加测试数据


--exec PrMatch_AddRecord 'no_close',0,99


--检测环境


exec PrMatch_CheckEnvironment 'no_close',0,99


exec PrMatch_CheckEnvironment 'closed',0,99


--数据删除


exec PrMatch_DelRecord 'no_close',0,99


exec PrMatch_DelRecord 'closed',0,99


--数据更新


declare @dtmBgnDate smalldatetime --大赛开始时间


set @dtmBgnDate=Getdate()


exec PrMatch_UpdateRecord @dtmBgnDate


--删除测试环境


--exec PrMatch_DropEnvironment 'no_close',0,99





三、处理名称相关表的方法(a


--取得closed0到closed99满足条件的数据


declare @sql varchar(8000)


declare @i int,@strTabName varchar(32)


set @i=0


set @sql=''


while (@i<=99)


begin


set @strTabName='Closed'+cast(@i as varchar)


select @sql=@sql+'select * from '+@strTabName+' where ctime<=''2007-02-01 9:00:00'''+' union'+char(10)+char(13)


set @i=@i+1


end




select @sql=left(@sql,len(@sql)-7)


--print @sql


exec(@sql)

(b)


sp_msforeachtable @command1='print ''?''',


@command2='select * from ? where ctime>''2007-02-01 9:00:00''',


@whereand=' and name like ''closed%'' '

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: