create trigger trg_ins_on_test on test 
for insert 
as 
begin 
  declare @sql string 
  set @sql=''
  select @sql='create table '+tablename+'(colinfo int ) go' from inserted
  exec(@sql)
end

解决方案 »

  1.   

    create trigger trg_ins_on_test on test 
    for insert 
    as 
    begin 
      declare @sql string 
      set @sql=''
      select @sql='if not exists(select 1 from sysobjects where name='''+tablename+''')  create table '+tablename+'(colinfo int ) go' from inserted
      exec(@sql)
    end
      

  2.   

    --------建立一个测试表tt
    create table tt
    (
    iid int identity(1,1) primary key,
    tablename varchar(20)
    )
    -------在测试表中插入数据
    insert tt(tablename) values('test')
    -------建立触发器,插入数据时触发
    create trigger trg_tt
     on tt for insert 
    as 
    begin 
      declare @tableName varchar(1000)
      declare @insertSql varchar(1000) 
    ------获得插入数据时的表名
      set @tableName=(select tablename from inserted)
    ------建立新表,字段为(iid int primary key,idName varchar(20))
      set @insertSql='create table '+@tablename+'(iid int primary key,idName varchar(20))'
      exec(@insertSql)
    end
      

  3.   

    --可以取值,但不能返回值
    create trigger trg_ins_on_test on test
    for insert 
    as 
    begin 
        declare  @sql varchar(8000)
        set @sql=''
        select @sql=@sql+tablename+',' from inserted
        set @sql=substring(@sql,1,len(@sql)-1)
        print @sql
    end
      

  4.   

    --一楼二楼的我写错了
    create trigger trg_ins_on_test on test 
    for insert 
    as 
    begin 
      declare @sql string 
      set @sql=''
      select @sql=@sql+'if not exists(select 1 from sysobjects where name='''+tablename+''')  create table '+tablename+'(colinfo int ) go ' from inserted
      exec(@sql)
    end
      

  5.   

    --处理的触发器(如果同时插入几条记录,也可以处理)
    create trigger tr_insert on 表
    for insert
    as
    declare @s varchar(8000)
    declare tb cursor local for
    select 'if not exists(select 1 from sysobjects where name='''
    +tablename+''' and xtype=''U'') create table ['+tablename
    +'](id int,name varchar(10))'
    from inserted group by tablename
    open tb
    fetch next from tb into @s
    while @@fetch_status=0
    begin
    exec(@s)
    fetch next from tb into @s
    end
    close tb
    deallocate tb
    go
      

  6.   

    --示例--测试表
    create table 表(id int identity(1,1),tablename sysname)
    go--处理的触发器(如果同时插入几条记录,也可以处理)
    create trigger tr_insert on 表
    for insert
    as
    declare @s varchar(8000)
    declare tb cursor local for
    select 'if not exists(select 1 from sysobjects where name='''
    +tablename+''' and xtype=''U'') create table ['+tablename
    +'](id int,name varchar(10))'
    from inserted group by tablename
    open tb
    fetch next from tb into @s
    while @@fetch_status=0
    begin
    exec(@s)
    fetch next from tb into @s
    end
    close tb
    deallocate tb
    go--插入数据测试
    insert 表 values('aa')
    insert 表 select 'aa'
    union all select 'bb'
    union all select 'cc'
    go--删除测试
    drop table 表,aa,bb,cc