一个表A 如下
 a     b     c     d    e
1001   0   3001    0    0第二个表B 如下
  a     b
1001    01
3001    02首先是一个触发器,当有数据插入到表B时,当所插入的字段a中的值与表A中的字段a或字段c中值相同时改写表A中相应的字段b或字段d表B中的值。即如上表则字段b改写为01等等。表A现在的结构可能不太好写,也可以修改成单条即如下,都是成对的,字段c为对id。当然不改最好了。
  a    b    c    d
1001   0    1    0
3001   0    1    0
存储过程1 找到记录       B.a=A.a
2 替换           B.b=0000
3 找到记录       B.a=A.c
4 替换           B.b=A.b
5 找到记录       B.a=A.a
6 替换           B.b=A.d
7 改写替换状态   A.e=1最后的结果就是表B中字段a的值与表A中成对的记录(字段a,字段c)的值进行了掉换。因表B中的字段a不能有重复的值出现所有中间用0000代替了一下。

解决方案 »

  1.   

    表A中有数条记录,这些记录是在表B中添加记录之前即已有的。
    表B中会有几千条记录,这些记录都是一一添加进表B的
      

  2.   

    触发器部分:create table A(a int,b int,c int,d int,e int)
    insert into A select 1001,0,3001,0,0create table B(a int,b varchar(4))
    insert into B select 1001,'01'
    insert into B select 3001,'02'
    gocreate trigger trg_B on B
    for insert
    as
    begin
        update A
        set
            b=case i.a when A.a then i.b else A.b end,
            d=case i.a when A.c then i.b else A.c end
        from
            inserted i
        where
            A.a=i.a or A.c=i.a
    end
    go