Create table A(A Varchar(50) )
Insert TEST Select * from SysColumns Where ID=OBJECT_ID('B') And ColID<>1 Order By ColID

解决方案 »

  1.   

    而且,每当表A中的列A有更新和插入时,表B的字段也随着更新或者插入,是不是写一个触发比较好呀
      

  2.   

    比如,表a中的字段a的值:11,22,33,44,55;
    则表b中的字段为11,22,33,44,55
    我实际应用中表a的字段a的值的类型是varchar,
      

  3.   

    当表a中字段a的值55被改成66,则表B中字段55也相应的变为66;
    当表a中字段a中插入一个99的值,则表b中也增加相应的99字段。
      

  4.   

    就是表b的字段名必须是表A中列a的值
      

  5.   

    其實系統表syscolumns完成的就是你說的功能.那理存有數據庫中所有表的字段並會據根變重增減。
      

  6.   

    b表中的新列是什么数据类型?
    假定b表中的变化列的数据类型都是varchar(6), 我试试看.
      

  7.   

    帮你顶一下,不过好像你的表达也是不太好!呵呵,我也有这毛病.
        你要做的是不是这件事.
      A.Table
    -------------------------
       id   col1 col2 col3
        1     a    b    c
        2     c    d    e
        3     r    g    f   B.Table
    -------------------------
          col1 col2  col3
           a     b    c
           c     d    e
           r     g    f
    ---------------------------------
       我知道是不是这么回事,A.Table 发生变化时B.Table也做同步,是不是???
      

  8.   

    不是啊,是这样的,
     A.Table
    -------------------------
       id   col1 
        1     aa  
        2     bb   
        3     cc      B.Table
    -------------------------
           aa   bb   cc
          ---------------------------------
      

  9.   

    觉得楼主想要的效果是:当增加表A中a列的值(增加一条元组),则在表B中增加一列;删除a列的值(删除一条元组),则在表B中删除一列;当修改表A中a列的值(更新一条元组),则在表B中修改相关列的列名。 如果是这样的庆,那就要做一些假定了:表A中a列应该唯一、非空;预先设定好B表中新增列的数据类型。
    同时,如果知道a列中的字符串的最大长度,且a列中不含一些特殊字符(如', ", %, _等)的话,那就容易一些了。 对于上面的要求,我大致实现了一个trigger。如果楼主要需求肯定下来的话,我就可以把代码贴上来了。
      

  10.   

    --创建表ta(这里,我是假定bcolumn为b表第一列之后的段名, aint为ta表中的一个属性)
    if exists(select* from sysobjects where name='ta' and xtype='U')
     drop table  ta
    create table ta ( bcolumn varchar(20) unique not null, aint int)
    go
    --创建表tb 
    if exists(select* from sysobjects where name='tb' and xtype='U')
     drop table  tb
    go
    create table tb( bint int)
    go
    --创建trigger
    if exists(select* from sysobjects where name='fluctuate' and xtype='TR')
     drop trigger fluctuate
    go
    create trigger fluctuate
    on ta
    after update, insert, delete
    as
    declare @table varchar(10)  
    declare @str varchar(100)
    declare @c1 varchar(20)
    declare @c2 varchar(20)
    set @table='tb'  --(该处适当修改)
    select @c2=bcolumn from deleted --修改或删除的列 (该处适当修改)
    select @c1=bcolumn from inserted --新增或修改的列 (该处适当修改)
    if @c1 is not null set @c1='['+@c1+']'
    if @c2 is not null set @c2='['+@c2+']'
    if @c2 is not null and @c1 is not null --当前进行update操作
    set @str='sp_rename '+char(0x27)+@table+'.'+
    @c2+char(0x27)+', '+@c1if @c2 is null and @c1 is not null --当前进行insert操作
       set @str='alter table '+@table+' add '+@c1+' varchar(6)'if @c2 is not null and @c1 is null --当前进行delete操作
       set @str='alter table  '+@table+'  drop column '+@c2print '@str:'+@str
    begin tran
     exec(@str)
     if @@error=0 commit tran
     else rollback tran    
    go
    --测试数据
    insert into ta select '11', 1 
    --查看效果
    select* from ta
    select* from tb--测试数据
    insert into ta select '22', 4 
    --查看效果
    select* from ta
    select* from tb--测试数据
    update   ta set  bcolumn='44'  where bcolumn='11'
    --查看效果
    select* from ta
    select* from tb--测试数据
    delete    ta where bcolumn='22'
    --查看效果
    select* from ta
    select* from tb
      

  11.   

    问题: 
       我实现的触发器不是元组级触发器.(sqlserver本身是不支持元组级触发器的。 要实现的话,应该用到游标, 表变量。我嫌它太麻烦就没有搞,如果楼主想要的话,也可以去实现它)
       不是元组级触发器的含义就是:如果insert、update或delete多条元组时,只会对最后一条元组进行触发操作。
       sorry.