我想动态创建365个表,表名按日期命名:M01D01,M01D02.........M12D31,字段只有一个ID
这是我写的语句:
declare @m int,@d int
declare @sql varchar(50),@tablename varchar(20)
select @m=1,@d=1
  while @m<12
   begin 
     while @d<=31
      begin
       select @tablename='M'+right(cast( 100+@m as varchar(20)),2 )+'D'+right(cast(100+@d as varchar(20)),2)
       select @sql='create table '+@tablename+' ([id] int)'
       select @d=@d+1
       --exec (@sql)
       print @sql //先测试,没有真正建表
      end 
    select @m=@m+1
   end
结果:
create table M01D01 ([id] int)
.
.
.
create table M01D31 ([id] int)
问题:
外循环怎么只循环一次?

解决方案 »

  1.   

    while @d<=31前加set @d=1
      

  2.   

    declare @m int,@d int
    declare @sql varchar(50),@tablename varchar(20)
    select @m=1
      while @m<12
       begin 
    select @d=1       ---- @d 的初始化应该在循环中
         while @d<=31
          begin
           select @tablename='M'+right(cast( 100+@m as varchar(20)),2 )+'D'+right(cast(100+@d as varchar(20)),2)
           select @sql='create table '+@tablename+' ([id] int)'
           select @d=@d+1
           --exec (@sql)
           print @sql 
          end 
        select @m=@m+1
       end