假设有
表T1
ID    CONTENT
1       A
2       B
3       C
4       D
...     ...
现在想做一个存储过程,首先将表T1的ID全部查询出来,然后新建一张表T2,结构如下(第一行为字段名)
1     2      3      4     5      ...
NULL  NULL   NULL   NULL  NULL   ...
也就是把在T1表中查询出的ID值作为新表T2的字段名
各位大哥能解答一下吗,谢谢啦!

解决方案 »

  1.   


    declare @表T1 table (ID int,CONTENT varchar(1))
    insert into @表T1
    select 1,'A' union all
    select 2,'B' union all
    select 3,'C' union all
    select 4,'D'declare @sql varchar(300)
    set @sql='create table t2('
    select @sql=@sql+'['+cast(ID as varchar(4))+'] INT ,' from @表T1
    set @sql=substring(@sql,1,len(@sql)-2)+')'
    /*
    select @sql
    结果:create table t2([1] INT ,[2] INT ,[3] INT ,[4] INT)
    */
    exec(@sql)
      

  2.   


    declare @表T1 table (ID int,CONTENT varchar(1))
    insert into @表T1
    select 1,'A' union all
    select 2,'B' union all
    select 3,'C' union all
    select 4,'D' union all
    select 5,'E'declare @sql varchar(max)--安全起见这改成max 
    set @sql='create table t2('
    select @sql=@sql+'['+cast(ID as varchar(4))+'] INT ,' from @表T1
    set @sql=substring(@sql,1,len(@sql)-2)+')'
    select @sql
    /*
    结果:create table t2([1] INT ,[2] INT ,[3] INT ,[4] INT ,[5] INT)
    --数据表中有几条这个位置就自动添加了,不需要手动处理
    */
    --exec(@sql)
      

  3.   

    可是这个地方也还是确定啊
    select 1,'A' union all
    select 2,'B' union all
    select 3,'C' union all
    select 4,'D' union all
    select 5,'E'你这里写到5就出5个字段
    我是希望能够在    select ID from T1    之后,把ID的值用某种方法做成T2的字段
      

  4.   


    declare @表T1 table (ID varchar(max),CONTENT varchar(1))--循环插入数据
    declare @i int
    set @i=1
    while @i<=100
    begin
    insert into @表T1
    select @i,'A'
    set @i=@i+1
    enddeclare @sql varchar(max)--安全起见这改成max 
    set @sql='create table t2('
    select @sql=@sql+'['+cast(ID as varchar(max))+'] varchar(max) ,' from @表T1 
    set @sql=substring(@sql,1,len(@sql)-2)+')'
    select @sql
    /*
    create table t2([1] varchar(max) ,[2] varchar(max) ,[3] varchar(max) ,[4] varchar(max) ,[5] varchar(max) ,
    [6] varchar(max) ,[7] varchar(max) ,[8] varchar(max) ,[9] varchar(max) ,[10] varchar(max) ,[11] varchar(max) ,
    [12] varchar(max) ,[13] varchar(max) ,[14] varchar(max) ,[15] varchar(max) ,[16] varchar(max) ,[17] varchar(max) ,
    [18] varchar(max) ,[19] varchar(max) ,[20] varchar(max) ,[21] varchar(max) ,[22] varchar(max) ,[23] varchar(max) ,
    [24] varchar(max) ,[25] varchar(max) ,[26] varchar(max) ,[27] varchar(max) ,[28] varchar(max) ,[29] varchar(max) ,
    [30] varchar(max) ,[31] varchar(max) ,[32] varchar(max) ,[33] varchar(max) ,[34] varchar(max) ,[35] varchar(max) ,
    [36] varchar(max) ,[37] varchar(max) ,[38] varchar(max) ,[39] varchar(max) ,[40] varchar(max) ,[41] varchar(max) ,
    [42] varchar(max) ,[43] varchar(max) ,[44] varchar(max) ,[45] varchar(max) ,[46] varchar(max) ,[47] varchar(max) ,
    [48] varchar(max) ,[49] varchar(max) ,[50] varchar(max) ,[51] varchar(max) ,[52] varchar(max) ,[53] varchar(max) ,
    [54] varchar(max) ,[55] varchar(max) ,[56] varchar(max) ,[57] varchar(max) ,[58] varchar(max) ,[59] varchar(max) ,
    [60] varchar(max) ,[61] varchar(max) ,[62] varchar(max) ,[63] varchar(max) ,[64] varchar(max) ,[65] varchar(max) ,
    [66] varchar(max) ,[67] varchar(max) ,[68] varchar(max) ,[69] varchar(max) ,[70] varchar(max) ,[71] varchar(max) ,
    [72] varchar(max) ,[73] varchar(max) ,[74] varchar(max) ,[75] varchar(max) ,[76] varchar(max) ,[77] varchar(max) ,
    [78] varchar(max) ,[79] varchar(max) ,[80] varchar(max) ,[81] varchar(max) ,[82] varchar(max) ,[83] varchar(max) ,
    [84] varchar(max) ,[85] varchar(max) ,[86] varchar(max) ,[87] varchar(max) ,[88] varchar(max) ,[89] varchar(max) ,
    [90] varchar(max) ,[91] varchar(max) ,[92] varchar(max) ,[93] varchar(max) ,[94] varchar(max) ,[95] varchar(max) ,
    [96] varchar(max) ,[97] varchar(max) ,[98] varchar(max) ,[99] varchar(max) ,[100] varchar(max))
    */明白了吗?
      

  5.   

    --我这里只是给出测试数据
    declare @sql varchar(max)
    set @sql='create table t2('
    select @sql=@sql+'['+cast(ID as varchar(max))+'] varchar(max) ,' from T1 --你的T1表名
    set @sql=substring(@sql,1,len(@sql)-2)+')'
    select @sql你把你的T1表名,对应上,运行一下就看明白了
    exec(@sql)是执行@sql字符串