1

tblCombined に一意のインデックスを設定しています。cyDate、dtlNr、seq というフィールドに順に設定されます。

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)

しかし、これは機能していないようです。いくつかのレコードをテストしました - フィールドを既に挿入されているものから変更しましたが、重複していないレコードはまだ除外されています。「存在しない」を使用するのは初めてなので、正しく使用していない可能性があります。

Where Not In も試しましたが、複数の列ではうまくいかないようです。

どんな提案でも大歓迎です。ありがとう!

4

2 に答える 2

2

あなたもwhereそのnot exists部分に必要です、のように...

where not exists (select 1 from tblcombined 
  where tblcombined.cydate = tbldailyresults.cydate 
  and tblcombined.dtlnr = tbldailyresults.dtlnr 
  and tblcombined.seq = tbldailyresults.seq)
于 2012-05-08T21:02:52.407 に答える
0

別の方法を次に示します。

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
于 2012-05-08T21:09:15.627 に答える