2012-05-08 12 views
1

tblCombinedで一意のインデックスが設定されています。これは、cyDate、dtlNr、seqの順にフィールドに設定されます。SQL Server 2005のユニークなインデックスステージングテーブルから挿入する場所がない場合

私は、tblDailyResultsという別のテーブル(ステージングテーブル)を持っています。それはtblCombinedと全く同じフィールドを持ちますが、インデックスはありません。毎日、私はフィードからこのステージングテーブルにレコードを受け取ります。

私がしたいのは、もしあなたがそうするならば、 "キャッチ"をセットアップすることです。そのため、ユニークなインデックスに違反する重複したレコードはエラーではなく、むしろ挿入されません。それはステージングテーブルに残っています(私はそのような注意を喚起し、そこから管理することができます)。

Insert Into tblCombined 
    ( 
     cyDate  
     ,dtlNr 
     ,seq 
     ,chCode 
     ,opCode 
     ,nrCode 

    ) 

    Select 
     cyDate  
     ,dtlNr 
     ,seq 
     ,chCode 
     ,opCode 
     ,nrCode 

    From tblDailyResults 

    Where Not Exists (Select cyDate ,dtlNr ,seq From tblCombined) 
をしかし、これは動作していないようです:

これは私が試したものです。私はいくつかのレコードをテストしました。すでに挿入されているフィールドからフィールドを変更し、重複していないレコードはまだ除外しています。私は「存在しない」ということを初めて使うことを認めているので、おそらく私はそれを正しく使用していません。

また、Not Inを試しましたが、複数の列では機能しないようです。

ご迷惑をおかけして申し訳ございません。ありがとう!

+0

は、あなたが特定のキー状況に対処する必要があります'tblCombined'には存在しませんが、' tblDailyRecords'には1回の実行で2回(またはそれ以上)存在しますか?可能であれば –

+0

、可能です。 – SeanFlynn

答えて

2

あなたのような...。ここ

where not exists (select 1 from tblcombined 
    where tblcombined.cydate = tbldailyresults.cydate 
    and tblcombined.dtlnr = tbldailyresults.dtlnr 
    and tblcombined.seq = tbldailyresults.seq) 
0

が代替方法ですが、あまりにもnot exists一部でwhereが必要になります。

Insert Into tblCombined 
( 
    cyDate  
    ,dtlNr 
    ,seq 
    ,chCode 
    ,opCode 
    ,nrCode 
) 

Select distinct 
    a.cyDate  
    ,a.dtlNr 
    ,a.seq 
    ,a.chCode 
    ,a.opCode 
    ,a.nrCode 
From tblDailyResults a 
left join tblCombined b on a.cyDate = b.cyDate 
         and a.dtlNr= b.dtlNr 
         and a.seq= b.seq 
         and a.chCode= b.chCode 
         and a.opCode= b.opCode 
         and a.nrCode= b.nrCode 
where b.cydate is null 
関連する問題