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

本文介绍了一套用于模拟大赛测试环境的SQL Server存储过程,包括环境构建、数据添加、环境检查、数据更新及清理等步骤。通过这些过程,可以方便地创建、填充并验证多个表的一致性和正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接触数据库早期写的东西,初学者可以看看。 一、接口部分 
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%'' '
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值