none
对表添加字段怎么可能引起数据重复。 RRS feed

  • 问题

  • sql2000,一张主表,一张明细,向主表中插入一条数据,那么触发器同步到明细表。字段很简单,在主表上添加了一个字段后,发现明细表中有重复的记录,后来仔细去测试,又没有找到问题了,又正常了。很是奇怪啊

    CREATE trigger in_tb_main on dbo.tb_main
    for INSERT
    as
    insert into tb_list(B_log_id,net_id)
    select a.log_id,b.net_id from inserted  a cross join code_net  b

    2010年5月11日 3:26

答案

  • 樓主的表關係沒有貼完整

    tb_main和code_net表的關係,關聯字段是?
    tb_list--是記錄?

     

    按以上語句可以這樣處理

    CREATE trigger in_tb_main on dbo.tb_main
    for INSERT
    as
    insert into tb_list(B_log_id,net_id)
    select
      DISTINCT --過濾重復
      a.log_id,b.net_id
    from
      inserted a
    cross join
      code_net b
    WHERE NOT EXISTS(SELECT 1 FROM tb_list WHERE B_log_id=a.log_id AND net_id=b.net_id)--加上條件


    ROY WU(吳熹)
    2010年5月11日 6:33
    版主

全部回复

  • 通过什么判断出是加字段引起的呢?

    2010年5月11日 4:40
  • 因为之前一直是正常的,后来在主表上加了个字段,才有这个现象,但我对事件进行跟踪时,又没发现任何问题,真不知道这是如何产生的,
    2010年5月11日 5:47
  • 樓主的表關係沒有貼完整

    tb_main和code_net表的關係,關聯字段是?
    tb_list--是記錄?

     

    按以上語句可以這樣處理

    CREATE trigger in_tb_main on dbo.tb_main
    for INSERT
    as
    insert into tb_list(B_log_id,net_id)
    select
      DISTINCT --過濾重復
      a.log_id,b.net_id
    from
      inserted a
    cross join
      code_net b
    WHERE NOT EXISTS(SELECT 1 FROM tb_list WHERE B_log_id=a.log_id AND net_id=b.net_id)--加上條件


    ROY WU(吳熹)
    2010年5月11日 6:33
    版主
  • 这里是做一个笛卡尔乘积,一个主记录id对应所有的地市编号。
    2010年5月11日 9:06