两个表,A表为原始表,B表为变化后的表,要求把变化后的字段的值用动态select语句写出来,怎么做?比如
A表
ItemID colA ColB colC
1       a     b   cB表
ItemID  colA colB  colC
  1      aa   b     c  
colA的值发生了变化,那么select语句是
select ItemID,colA from B where....
如果B表为:
B表
ItemID  colA colB  colC
  1      aa   bb     c  
cola ,colB的值都发生了变化,
那么select 语句是:select ItemID, cola,colB...
以此类推。
谢谢各位高手先

解决方案 »

  1.   


    create table #A (ItemID int primary key identity(1,1),colA varchar(10),colB varchar(10),colC varchar(10))
    insert into #A values ('a','b','c')
    insert into #A values ('a','b','c')
    create table #B (ItemID int primary key identity(1,1),colA varchar(10),colB varchar(10),colC varchar(10))
    insert into #B values ('aa','bs','c')
    insert into #B values ('a','b','c')
    select * from #A
    select * from #Bselect bb.* from #A aa inner join #B bb 
    on aa.colA!= bb.colA or aa.colB!=bb.colB or aa.colC!=bb.colC
    where aa.ItemID = bb.ItemID不知道是不是你要的
      

  2.   

    LZ的意思是 如果A字段的值不同,就查询出A字段的值,如果A,B字段的值不同,就查询出A,B字段的值,以此类推
      

  3.   


    如果是要記錄A表那一個發生變化吧?在B表不要重複記錄,可需要用int就行了,記錄變化次數在觸發器實現
      

  4.   

    create table a(ItemID int, colA varchar(10),ColB varchar(10), colC varchar(10))
    insert b select 1 ,'a' ,'b' ,'c'create table b(ItemID int, colA varchar(10),ColB varchar(10), colC varchar(10))
    insert b select 1 ,'aa' ,'b' ,'c'select b.ItemID,
           colA=(case when a.colA=b.colA then null else b.colA end),
           colB=(case when a.colB=b.colB then null else b.colB end),
           colC=(case when a.colC=b.colC then null else b.colC end)
     from a,b where a.ItemID=b.ItemID
      

  5.   

    实际上写在触发器里的,当表更新的时候,选出那些更新的字段,和他们的值, 如果A字段的值不同,就查询出A字段的值,如果A,B字段的值不同,就查询出A,B字段的值,以此类推