我现在有表A,里面存着一些记录
还有表B,C,D,E表作为模板表现在把表A中Flag = 1的记录,创建跟B,C,D,E表结构一样的表,新创建的表名用A表中的字段TName的值,加上'KT'
另,我想用B表作为模板创建起来快些,或许有更好的方法也可以。
本人SQL水平实在有限,求SQL语句

解决方案 »

  1.   

    动态SQL 
    做个循环,生成SQL。然后EXEC执行。
      

  2.   

    DECLARE @S VARCHAR(MAX)
    SELECT @S=ISNULL(@S,'')+' SELECT * INTO '+TName+'KT'+' FROM A WHERE Flag = 1 ' FROM A
    EXEC(@S)
      

  3.   

    3楼的就是动态执行的例子
    如果只在数据库端完成所有功能只能用动态执行的方法
    如果前后台接合使用, 在前端用循环拼好SQL语句, 再一次性放到后台执行
      

  4.   

    create table t_t
    (
     flag int,
    Tname varchar(10)
    )insert into t_t select 1,'A'
    union all select 0,'AA'
    union all select 1,'B'
    union all select 1,'C'
    union all select 1,'D'declare @sql varchar(max)
    declare @row int
    declare @id int
    declare @n int
    declare @tablename varchar(100)select ID=identity(int,1,1), tname into #temp from t_t where flag=1
    set @row=@@rowcountset @n=1
    set @id=1
    set @sql=''
    set @tablename=''
    while(@n<=@row)
    begin
    print('begin')select @tablename='PK'+ tname   from   #temp   where   ID=@id 
    -------------------B,C,D为模版表,创建表时,只创建表结构------------------------
    select @sql=@sql+' select * into ' + @tablename + 'B'+' from  B where 1!=1 '
    select @sql = @sql + 'select * into ' + @tablename + 'C' + ' from  C where 1!=1 '
    select @sql = @sql + 'select * into ' + @tablename + 'D' +  ' from D where 1!=1 '
    select @n=@n+1
    select @id=@id+1end
    print(@sql)
    exec(@sql)
    drop table #temp