2012-05-08 55 views
1

我有一個在tblCombined中設置的唯一索引。它按照cyDate,dtlNr和seq的順序依次設置。SQL Server 2005唯一索引插入來自不在其中的登臺表

我有另一個表 - 一個臨時表 - 稱爲tblDailyResults。它與tblCombined具有完全相同的字段,但沒有索引。我每天都會收到來自Feed的記錄。

我想要做的就是設置一個「catch」,如果你願意的話,那麼如果一個重複的記錄違反了唯一索引,它就不會出錯 - 相反,它不會被插入;它會保留在臨時表格中(然後我可以發出警告提示並從那裏管理它)。

這是我已經試過:

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,但似乎不適用於多列。

任何建議表示讚賞。謝謝!

+0

請問你曾經不得不面對的情況是,一個特定的鍵在'tblCombined'中不存在,但是在'tblDailyRecords'中存在兩次(或更多)一次運行? –

+0

這是可能的,是的。 – SeanFlynn

回答

2

你需要在not exists部分where太像...

where not exists (select 1 from tblcombined 
    where tblcombined.cydate = tbldailyresults.cydate 
    and tblcombined.dtlnr = tbldailyresults.dtlnr 
    and tblcombined.seq = tbldailyresults.seq) 
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