CREATE TABLE NewTable (column_a INT) 
GO
ALTER TABLE NewTable ADD column_b VARCHAR(20) NULL
GO
重复上面步骤

解决方案 »

  1.   

    用游标就行了.declare @sql varchar(8000),@fdname varchar(10)
    declare #tb cursor for select distinct ename from 数据结构表
    open #tb
    fetch next from #tb into @fdname
    while @@fetch_status<>0
    begin
      set @sql='create table ['+@fdname+'](字段名 int)'
      exec(@sql)
      fetch next from #tb into @fdname
    end
    close #tb
    deallocate #tb
      

  2.   

    如果你表中的记录不多.也可以用下面的方法:declare @sql varchar(8000)
    set @sql=''
    select @sql=@sql+char(13)+'create table ['+ename +'](字段名 int)'
    from(select distinct ename from 数据结构表) a
    exec(@sql)
      

  3.   

    你们理解错意思了
    我是要建一张表,表的字段名是[数据结构表]中eName字段的记录值,现在有20条记录,也就是说新表有20个字段
      

  4.   

    那就是这样处理:declare @sql varchar(8000)
    set @sql='create table 表名('
    select @sql=@sql+'['+ename +'] int,'  --如果不是int,就将它改成其他类型
    from(select distinct ename from 数据结构表) a
    set @sql=left(@sql,len(@sql)-1)+')'
    exec(@sql)
      

  5.   

    执行的结果不对,建好的表应该有20各字段,他只有一个字段
    我还忘了说一个问题:当我从表中取出eName的记录值时,有个要求是parient_id字段等于1的eName记录值,所以我定义的游标是
    declare #tb cursor for select distinct eName from [dbo].[数据结构表] where parient_id=1
      

  6.   

    游标没有定义错.
    应该是你写的语句有错,贴出来看看.
    记录不多的话,不用游标好一点,用我的这个方法试试:
    declare @sql varchar(8000)
    set @sql='create table 表名('
    select @sql=@sql+'['+ename +'] int,'  --如果不是int,就将它改成其他类型
    from(select distinct ename from 数据结构表 where parient_id=1) a
    set @sql=left(@sql,len(@sql)-1)+')'
    exec(@sql)
      

  7.   

    CREATE proc btable  
    As
     declare @tbname varchar(10)
     declare @fdname varchar(10)
     declare @pd integer,@cd integer
     declare sCursor cursor for select eName,parient_id from [dbo].[数据结构表]
     declare @sql varchar(8000)
     declare tb cursor for select distinct eName from [dbo].[数据结构表] where parient_id=1 
     Open sCursor
     fetch next from sCursor into @tbname,@pd
     while @@fetch_status=0
     begin
        if @pd=0       break
        fetch next from sCursor into @tbname,@pd
     end
     close sCursor
     deallocate sCursor open tb
     set @sql='create table '+@tbname+'( '
     fetch next from tb into @fdname
     while @@fetch_status<>0
     begin
      set @sql=@sql+' ['+@fdname+'] varchar(1000) Not null,'
      fetch next from #tb into @fdname
     end
     close tb
      

  8.   

    ....
     begin
      set @sql=@sql+' ['+@fdname+'] varchar(1000) Not null,'
      fetch next from #tb into @fdname --这里的#tb是从那里来的?你没有定义这个游标吧?
     end
     close tb
      

  9.   

    将上面这段改一下,再试试begin
      set @sql=@sql+' ['+@fdname+'] varchar(1000) Not null,'
      fetch next from tb into @fdname --根据你的要求,应该是这样的.
     end
     close tb
      

  10.   

    select * into 新表 from [数据结构表] where parient_id=1
      

  11.   

    我在建表之前游一个判断表是否已经存在的语句,可是好像不管用啊
    在open tb之前有这么一句: 
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[@tbname]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
        exec('drop table'+' [dbo].['+@tbname+']')
      

  12.   

    declare  cursor_insert cursor for select eName from [数据结构表] where parient_id=1
    declare @i varchar(255)
    open cursor_insert
    fetch cursor_insert into @i
    while @@fetch_status=0
    begin
      exec('create table ['+@fdname+'](字段名 int,其他字段 int)')
      fetch cursor_insert into @i
    end
    close cursor_insert
    deallocate cursor_insert
      

  13.   

    判断表是存在,你写错了.应该这样:
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].['+@tbname+']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
        exec('drop table'+' [dbo].['+@tbname+']')
      

  14.   

    照你原来的写法,你检查的表名是:[dbo].[@tbname]
    而不是真正要检查的表.(误将变量放入了字符串中)
      

  15.   

    select @sql=@sql+'['+ename +'] int,'  --如果不是int,就将它改成其他类型
    from(select distinct ename from 数据结构表 where parient_id=1) a
    能给我解释一下这句中的a做什么用的吗
      

  16.   

    我还想请问一下,为什么我将定义的字段由1000改为800,在执行就出现下面的错误呢?
    警告: 已创建表 'Jgzdml',但其最大行大小(11250)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。我开始已经执行了一次定义为1000的,然后该了执行就出现上面的错
      

  17.   

    警告: 已创建表 'Jgzdml',但其最大行大小(11250)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。是应为你定义的表超过了一页8K
      

  18.   

    那为什么我定义字段长度为varchar(1000)是没有出现这个问题呢
      

  19.   

    我还有一个问题,如果我的存储过程有一个输出参数
    create proc btable @tbname varchar(10) output
    为什么我执行的时候出现这个问题呢?
     过程 '建基础表' 需要参数 '@tbname',但未提供该参数。
      

  20.   

    你的调用方法不对,应该是这样调用:declare @re varchar(10)  --定义变量用来保存存储过程执行结果
    exec btable @re out      --输入参数
    print @re  --显示存储过程返回结果.