程序如下,思路是设2层循环,内层循环用insert产生一列(0,15,30,45,60。、、、)存入#tb
外层循环一边建立新列,一边把#tb一行行复制入最终的表格中,最后应该产生n列0,15,30,45,60……为什么不行呢?
其实这是把刚才发过的问题简化了一些declare @distance decimal(6,3), @times int, @tongji int, @sql varchar(500), @number int, @sql2 varchar(500)
set @distance=0
set @times=0
set @number=1drop table results
create table results
(
resultID int IDENTITY(1,1),
a1 int
)WHILE (@distance<=20)
BEGIN
create table #tb
(
tID int IDENTITY(1,1),
a int
)
WHILE (@times<=1440)
Begin

insert into #tb (a) values (@times)
select @times=@times+15
End
select @distance=@distance+0.2
select @sql2= 'UPDATE results SET a'+convert(varchar(10),@number)+'= #tb.a FROM results, #tb WHERE results.resultID=#tb.tID'
exec(@sql2)
select @number=@number+1
select @sql='ALTER TABLE results ADD COLUMN a'+convert(varchar(10),@number)+' int' --自动加一列
exec(@sql)
drop table #tb
END
select * from results

解决方案 »

  1.   

    你都没有往results
    insert的语句,只有update
    怎么可能有记录呢
      

  2.   

    select @sql2= 'UPDATE results SET a'+convert(varchar(10),@number)+'= #tb.a FROM results, #tb WHERE results.resultID=#tb.tID'
    --〉
    select @sql2= 'UPDATE results SET a'+convert(varchar(10),@number)+'= #tb.a FROM results, #tb WHERE results.resultID=#tb.tID
     insert results(a'+convert(varchar(10),@number)+') select a from #tb where not exists ( seelct 1 from results WHERE results.resultID=#tb.tID )'ps:没测试,回家了,懒得测试了
      

  3.   

    --不保证结果正确,楼主慢慢调试,我只是帮你修正了一些语法错误.declare @distance decimal(6,3), @times int, @tongji int, @sql varchar(500), @number int, @sql2 varchar(500)
    set @distance=0
    set @times=0
    set @number=1drop table resultscreate table results
    (
    resultID int IDENTITY(1,1),
    a1 int
    )
    insert into results select top 100 1 from sysobjects a,sysobjects b
    WHILE (@distance<=10)
    BEGIN
        create table #tb
        (
        tID int IDENTITY(1,1),
        a int
        )
        set @times=0
        WHILE (@times<=1440)
        Begin
            insert into #tb (a) values (@times)
            select @times=@times+15
        End
        select @distance=@distance+0.2
        select @sql2= 'UPDATE results SET a'+convert(varchar(10),@number)+' = #tb.a FROM results, #tb WHERE results.resultID
    =#tb.tID'
        exec(@sql2)
        select @number=@number+1
        select @sql='ALTER TABLE results ADD  a'+convert(varchar(10),@number)+' int' --自动加一列
        exec(@sql)
        drop table #tb
    END
    select * from results
     
      

  4.   

    直接用insert插入会出其它的问题,用update没问题吧?把临时表#tb里的数据拷入results
      

  5.   

    把insert into results select top 100 1 from sysobjects a,sysobjects b改为insert into results(a1) select top 100 1 from sysobjects a,sysobjects b
      

  6.   

    原来如此 我的内循环犯了一个很弱的错啊。
    能问一下top 100 1 from sysobjects a,sysobjects b 这个什么意思吗?
      

  7.   

    意思是:插一百个1到results表里去。这样比用循环简洁些。