Sql生成大数据量

上一篇 / 下一篇  2011-07-15 17:16:09 / 个人分类:数据库

最近在学习SqlServer中一些函数,存储过程,由于以前在中写过关于产生大数据量的存储过程,为了更好的熟悉中的一些函数和语法,想到在写一个利用sql生成大量数据的存储过程.
  要生成的数据表是一个订单的信息,当然这里包括两部分,订单表和订单明细表。例如表结构如下
:
   
订单表(订单号,订单名称,订单类型,备注)主键(订单号),由日期+3位流水号组成
.
   
订单明细(订单行号,名称,物料类型,数量,订单号,备注)主键(订单行号,订单号
).
   
在生成大数据量时采用的是循环插入数据,订单行号、订单类型,物料类型,名称都随机数的形式产生。以下是相应的存储过程
:

Create Procedure GenerateData(@year varchar(20) ,@count_I int,@count_j int) /* @year 
用于输入年份,@count_I主表中执行的次数,@count_j从表中循环的次数  */

as
begin
Declare @NO varchar(20),  --
定义订单号
        @year_c varchar(20), --
年份
        @date varchar(20),   --
日期
        @i int,             
        @liushuihao varchar(6),  --
生成订单号时产生的流水号
        @j int,
        @num varchar(6),         --
日期
        @ordertype int,          --
订单类型 
        @ordername varchar(50),  --
订单名称

        @k int
   set @k=1
  
 --
判断传入的年份是否为空,如果为空,取当前的年份--
   If @year=''
     set  @year_c=cast(year(getdate()) as varchar)
   else
      set @year_c=@year
 --
循环往表中插入数据
--
  while @k<13   --
月份循环
--
    begin
    set @i=1
    If len(cast(@k as varchar))<2
      set @date=cast(@year_c+'0'+cast(@k as varchar) as varchar)
    else
      set @date=cast(@year_c+cast(@k as varchar) as varchar)
    while @i<@count_I     --
循环数据插入主表
--
    
      begin
         set @j=1
        -- print @j
-------------- --
生成数据插入主表
Tbl_Order------------------------------
         set  @num=cast(('000'+cast(@i as varchar)) as varchar)
         set  @liushuihao=substring(@num,len(@num)-3,4)   --
取流水号

       
         set  @No=cast((@date+@liushuihao) as varchar)    --
取订单号码
         set  @ordertype=cast( ceiling(rand()*5) as int)   /*celling
函数取随机数时从1----N之间*/
   
--
以下是随机产生订单名称
--
     set  @ordername=CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+
                     CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+
                     CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+
                     CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+
                     CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+
                     CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))
--
插入数据

   insert into Tbl_Order (   OrderNo,
                               OrderName,
                               OrderType,       
                               Remark )
     values(@No,@ordername,@ordertype,'')
   --------------
生成数据插入明细表tbl_der_Detail-----------------------------
     Declare @Order_lineNo int, @order_lineName varchar(60),@Ma_type int,@amount decimal(7,3)
         while @j<@count_j
          begin
             set @ma_type=cast(ceiling(rand()*20) as int)
             set @amount=cast(ceiling(rand()*1000) as decimal(7,3))
             Set @order_lineName=CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+
                                 CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+
                                 CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+
                                 CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+
                                 CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))+
                                 CHAR(CONVERT(INT,rand()*26)+(CASE   WHEN   RAND()*2   >    1   THEN   97   ELSE   65   END))
             --
插入表
--
             insert into Tbl_Order_Detail
              ( Order_lineNo,Order_lineName,Ma_type,OrderNo,amount,Remark)
              values(@j,@Order_lineName,@Ma_type,@No,@amount,'')
             Set @j=@j+1
          End
    set @i=@i+1
end
set @k=@k+1
end
end

   接下来根据需要执行存储过程,将会自动插入数据到表中。例如:执行exec GenerateData '2011',11,11,在Tbl_Order中将会有120条记录,在Tbl_Order_Detail中将会有1200条数据。由于平时用Sql比较少,对Sqlserver中的函数也不是很熟悉,存储过程写的太复杂或存在问题,还希望路过的朋友多多指正。

 


TAG:

 

评分:0

我来说两句

Open Toolbar