跟老大交流了一下,需求是这样的
在一张表里每条数据更改会增加一个版本号控制
举个例子
id,name,code,adderss,banben
1,'a','aa','aaa',1
如果界面上修改了这个表中的某个字段 比如说name 从a 变成了b
那么表中数据为
id,name,code,adderss,banben
1,'a','aa','aaa',1
1,'b','aa','aaa',2
当然表中数据不止1条,
现在就是遍历这个表,然后比较同一标示字段的不同版本之间那些字段更改了
也就是遍历所有列

解决方案 »

  1.   

    用触发器行不?添加个记录表TB,加上一列列名记录colnameif update(colname)
    insert TB
    select *.deleted,colname from localTBinsert TB
    select *.inserted,colname from localTB???
    这样?
      

  2.   

    这个是用存储过程来完成
    存储过程有三个参数(表明,版本号1,版本号2)
    1.将版本号1 的数据 取出来插入到临时表#A里面
    2.将版本号2 的数据取出来插入到临时表#B里面
    当然可以用row_number() 函数设个自增长列,这样用while循环好做一点
    然后就是比较#A,#B 相同标示字段有那些列值改变了。然后将该列的原值和改变后的值取出来
    插入到另一张变更表(这个插入操作已经用存储过程写好了)现在难点就在于 这个while循环,该怎么取出那些列值变了
      

  3.   

    CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp);
      

  4.   

    create table TB (id int,name varchar(10),code varchar(10),adderss varchar(10),banben int)
    insert into tb select 1,'a','aa','aaa',1
    insert into tb select 1,'b','aa','aaa',2
    insert into tb select 2,'c','dd','eee',1
    insert into tb select 2,'c','ee','eee',2
    insert into TB select 1,'d','aa','aaa',3
    insert into TB select 3,'k','kk','kkk',1 --这个是没变的
    go
    select distinct a.id,
    (case when a.name<>b.name then 'name'
    when a.code<>b.code then 'code'
    when a.adderss<>b.adderss then 'adderss'
    end) as 改变的列,
    (case when a.name<>b.name then a.name
    when a.code<>b.code then a.code
    when a.adderss<>b.adderss then a.adderss
    end) as 改变的值,
    a.banben
    from TB a inner join TB b on a.id=b.id and a.banben<>b.banben 
    /*
    id          改变的列    改变的值       banben
    ----------- ------- ---------- -----------
    1           name    a          1
    1           name    b          2
    1           name    d          3
    2           code    dd         1
    2           code    ee         2(5 行受影响)*/
    go
    drop table tb
      

  5.   

    另:
    地址的英文单词是 address,害得我查了半天错!
      

  6.   

    顯示在資料庫內自動產生的唯一二進位數字的資料類型。timestamp 通常用來作為版本戳記資料表資料列的機制。儲存體大小是 8 位元組。每個資料庫都有一個計數器,會針對在資料庫內包含 timestamp 資料行的資料表所執行的每個插入或更新作業而累加。這個計數器是資料庫時間戳記。這會追蹤資料庫內的相對時間,而不是可關聯於時鐘的實際時間。資料表只能有一個 timestamp 資料行。每次修改或插入含 timestamp 資料行的資料列時,都會在 timestamp 資料行中插入累加的資料庫時間戳記。這個屬性會使 timestamp 資料行不適合作為索引鍵 (尤其是主索引鍵) 的候選項。資料列的任何更新都會變更時間戳記值,因而會變更索引鍵值。如果資料行在主索引鍵中,舊的索引鍵值便不再有效,參考舊值的外部索引鍵也不再有效。如果動態資料指標參考資料表,所有更新都會變更資料列在資料指標中的位置。如果資料行在索引鍵中,資料列的所有更新也會產生索引的更新。
      

  7.   

    换个思路,建立一个操作日志表,
    table_log(id, 表名,列名,值),然后在表上建立触发器,这样要知道每个表的变化情况,直接从这个表中查,可行?按照楼主的表设计的话,很纠结