这样试试create Trigger  insert_tri
on 表名
for insert 
as 
declare @aa varchar(50)
declare @sql varchar(1000)
set @sql=''
declare cur_tmp cursor for
select 编号 from inserted   
open cur_tmp
fetch next from cur_tmp into @aa
while @@fetch_status=0
begin
select @sql='alter table 表名 add '+@aa+' 列数据类型 默认值'
exec(@sql)
fetch next from cur_tmp into @aa
end
close cur_tmp
deallocate cur_tmp

解决方案 »

  1.   

    create Trigger  insert_tri
    on 表名
    for insert 
    as 
    declare @aa varchar(50)
     select @aa = 编号 from inserted   
    alter table 表名 add @aa 列数据类型 默认值
      

  2.   

    create table ta(number int)create trigger test_tr on ta
    for insert
    as
    begin
    DECLARE @number int,@sql varchar(4000),@sql1 varchar(4000),@i int
    DECLARE roy CURSOR
    FOR SELECT * from inserted
    OPEN roy
    FETCH next FROM roy into @number
    WHILE @@FETCH_STATUS = 0
    begin
    begin
      if exists(select 1 from sysobjects where name='tb' and xtype='U')
        begin
             select @i=max(colid)+1 from syscolumns where id=object_id('tb')
             set @sql=N'alter table tb add C'+cast(@i as varchar)+' int null'
             set @sql1=N'update tb set C'+cast(@i as varchar)+'='+cast(@number as varchar)
    --print @sql
    --print @sql1
             exec(@sql)
             exec(@sql1)
        end
    else
        begin
             set @sql=N'create table tb(C1 int)'
             set @sql1=N' insert tb select C1='+cast(@number as varchar)
             exec(@sql)
             exec(@sql1)
        end
    end
    FETCH NEXT FROM roy INTO @number
    end
    CLOSE roy
    DEALLOCATE roy
    end
      

  3.   

    测试:
    insert ta 
    select 10 union all
    select 13 union all
    select 18 union all
    select 26
    查询:
    select * from tbC1          C2          C3          C4          
    ----------- ----------- ----------- ----------- 
    10          13          18          26(所影响的行数为 1 行)--drop table ta,tb
      

  4.   

    不好意思  我表达能力不好  
    我想要的结果是
    当在A表中插入一行时 就在B表中插入一个列  列名字是A表的编号
    要实现的功能是 比如A表
      a编号 |  任务
      1     |  吃
    原来B表
     b编号|  姓名    
      1   |  张三
      2   |  李四比如A表填加一列
    a编号|   任务
     1   |   吃
     2   |   喝
     
    触发后B表 
     b编号|  姓名 |  2<--------(这个列是我想要增加)
      1   |  张三 | null
      2   |  李四 | null
      

  5.   

    我按照你的方法做了  没有错误 
    可是在主表 填加数据时
    出错啊 
      错误提示   第一行 ‘1’附近有错误 在次填的时候
    错误提示   第一行 ‘2’附近有错误 
    以后一直是这样的 提示不能添数据   
    错误提示   第一行 ‘3’附近有错误 
    ………………
    错误提示   第一行 ‘n’附近有错误
    -------------------------------------
    你把语句贴出来看看,就像roy_88(中国风_燃烧你的激情!!!) 那样
    print @sql看看.
      

  6.   

    看楼主报错的原因是不是这个.use northwind
    go
    alter table orders add 1 varchar(10) --第 1 行: '1' 附近有语法错误。
    alter table orders add [1] varchar(10) --正确
      

  7.   

    向表中插如入数据 insert into 活动记录 values ('23','wwwwwwwww','dfddf','1986 3 2')
    提示服务器: 消息 16924,级别 16,状态 1,过程 test_tr,行 9
    Cursorfetch: 在 INTO 列表中声明的变量数目必须与所选择的列数目匹配。
    语句已终止。
      

  8.   

    向表中插如入数据 insert into 活动记录 values ('23','wwwwwwwww','dfddf','1986 3 2')
    -----------------------------------------------
    insert into 活动记录(把那四个字段名写出来)
    values ('23','wwwwwwwww','dfddf','1986 3 2')应该是你活动记录表中不止四个字段.
      

  9.   

    insert into 活动记录 values ('23','wwwwwwwww','dfddf','1986 3 2')
    这句就会出错吗?把你写的触发器代码贴出来看下,最好还有活动记录表表结构.
      

  10.   


    use Exampleif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[活动记录]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[活动记录]
    GOCREATE TABLE [dbo].[活动记录] (
    [活动编号] [int] NOT NULL ,
    [内容] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
    [地点] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [时间] [datetime] NULL 
    ) ON [PRIMARY]
    GO
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[是否参加活动]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[是否参加活动]
    GOCREATE TABLE [dbo].[是否参加活动] (
    [编号] [int] IDENTITY (1, 1) NOT NULL ,
    [ID] [int] NOT NULL ,
    [活动1] [bit] NULL 
    ) ON [PRIMARY]
    GOcreate Trigger  insert_tri
    on 活动记录
    for insert 
    as 
    declare @aa varchar(50)
    declare @sql varchar(1000)
    set @sql=''
    declare cur_tmp cursor for
    select 活动编号 from inserted   
    open cur_tmp
    fetch next from cur_tmp into @aa
    while @@fetch_status=0
    begin
    select @sql='alter table 是否参加活动 add '+@aa+' bit null'
    exec(@sql)
    fetch next from cur_tmp into @aa
    end
    close cur_tmp
    deallocate cur_tmp
    goinsert into 活动记录 values ('3','wwwwwwwww','dfddf','1986 3 2')goselect * from 活动记录
    go
      

  11.   

    --修改了触发器,你再试下
    --但错误信息不是你刚才发的"Cursorfetch: 在 INTO 列表中声明的变量数目必须与所选择的列数目匹配。"alter Trigger  insert_tri
    on 活动记录
    for insert 
    as 
    declare @aa varchar(50)
    declare @sql varchar(1000)
    set @sql=''
    declare cur_tmp cursor for
    select 活动编号 from inserted   
    open cur_tmp
    fetch next from cur_tmp into @aa
    while @@fetch_status=0
    begin
    select @sql='alter table 是否参加活动 add ['+@aa+'] bit null'   --用[]号将字段名括起来
    exec(@sql)
    fetch next from cur_tmp into @aa
    end
    close cur_tmp
    deallocate cur_tmp
    go