2

一時テーブルから SQL のテーブルを更新する SQL ステートメントを作成しています。次のエラー メッセージが表示され続けます: Cannot insert duplicate key row in object with unique index 'SAXXIRPT'

これが私の更新ステートメントです:

Update dbo.sat_ser_rpt_itm
SET itm_key_cd = n.itm_key_cd,
  itm_typ_cd  = n.itm_typ_cd,
  ser_id  = n.ser_id ,
  as_of_dt = n.as_of_dt,
  ocrn_nr  = n.ocrn_nr ,
  id_rssd = n.id_rssd,
  ocrn_day_txt = n.ocrn_day_txt ,
  ocrn_dt = n.ocrn_dt ,
  hol_flg = n.hol_flg ,
  ocrn_val_nr = n.ocrn_val_nr 
  from #LookupTable n
  on sat_ser_rpt_itm.id_rssd = n.id_rssd 
AND sat_ser_rpt_itm.as_of_dt = n.as_of_dt 
AND sat_ser_rpt_itm.ser_id = n.ser_id 
and sat_ser_rpt_itm.itm_typ_cd = n.itm_typ_cd 
and sat_ser_rpt_itm.ocrn_nr = n.ocrn_nr 
where t.id_rssd is not null and  t.as_of_dt is not null  and  t.ser_id is not null and  t.itm_typ_cd is not null and t.ocrn_nr is not null  

これらは私のインデックスです(クラスター化されています):

id_rssd, as_of_dt, ser_id, itm_key_cd and ocrn_nr

このエラー メッセージの原因は何ですか?

4

2 に答える 2

2

エラーメッセージにはあまりあいまいさはありません:あなたはどこかに重複を設定しています

  1. 組み合わせが既に存在し、再度挿入しようとしている、または
  2. 存在せず、同じ組み合わせで複数の行を更新している または
  3. オーバーラップ: 組み合わせが既に存在し、同じ組み合わせで複数の行を更新しています。

これを引き起こしている問題は、同じ組み合わせで複数の行を更新していると思います

テーブルdbo.sat_ser_rpt_itmの主キーが何かわかりません

このように 2 つのテーブルを結合してみてください (dbo.sat_ser_rpt_itm,#lookup_table)

Update itm
SET 
   //itm_key_cd = n.itm_key_cd,
   //ser_id = n.ser_id
  itm_typ_cd  = n.itm_typ_cd,
  //as_of_dt = n.as_of_dt,
  //ocrn_nr  = n.ocrn_nr ,
 //id_rssd = n.id_rssd,
  ocrn_day_txt = n.ocrn_day_txt ,
  ocrn_dt = n.ocrn_dt ,
  hol_flg = n.hol_flg ,
  ocrn_val_nr = n.ocrn_val_nr 
  FROM dbo.sat_ser_rpt_itm itm 
  INNER JOIN #LookupTable n
  ON ..................  ( it could be itm.id_rssd = n.id_rssd OR itm.as_of_dt = n.as_of_dt  OR
                           OR  itm.ser_id = n.ser_id OR itm.itm_key_cd = n.itm_key_cd OR 
                            itm.ocrn_nr = n.ocrn_nr )

  WHERE t.id_rssd is not null AND  t.as_of_dt is not null  
  AND  t.ser_id is not null AND  t.itm_typ_cd is not null AND t.ocrn_nr is not null 
于 2012-11-08T12:39:13.670 に答える