2012-05-10 13 views
0

私は、エンジンのhistroyデータを照会するSQLデータベースを持っています。この機能の1つは、ストアドプロシージャが毎日特定のイベントのすべてのデータを検索し、イベントが見つかった場合は新しいテーブルに挿入することです。SQL Server、Canは1つの値に対して2つの列を考慮に入れていますか?

ID/ID_Location/IDDown/IDUp/DtDown/DtUp/TimeDifference/IsExempt/Reason/Details/OrigDtUp 

とSQLクエリは次のとおりです:

問題は、このデータは一意でなければならないということです...

表のヘッダは以下の通りです

insert into exempts(ID_Location, iddown, idup, dtdown, dtup, timedifference) 
select ID_Location, iddown, idup, dtdown, dtup, DATEDIFF(MINUTE, dtdown, dtup) as timedifference 
from @tmptbl 
except 
select ID_Location, iddown, idup, dtdown, dtup, timedifference from exempts 

しかし、私は必要DtUpOrigDtUpの両方の列をチェックし、ユーザーがDtUpをliの任意の値に変更できるため、時差を無視するクエリ元のDtUpの値がOrigDtUpに移動するとレコードが異なるので、レコードは元の値に再挿入されます。

ありがとうございます! ニール

答えて

2

左結合を使用し、それはロジックを参照する方が簡単です。お返事神保ため

insert into exempts(ID_Location, iddown, idup, dtdown, dtup, timedifference) 
    select t.ID_Location, t.iddown, t.idup, t.dtdown, t.dtup, DATEDIFF(MINUTE, dtdown, dtup) as timedifference 
    from @tmptbl as t 
     left join exempts as e 
     on t.ID_Location = e.ID_Location 
     and t.iddown = e.iddown 
     and t.idup = e.idup 
     and t.dtdown = e. dtdown 
     and t.DtUp = e.OrigDtUp -- << Match diff columns here 
    where t.ID_Location is null 
+0

大感謝。プロシージャを変更しようとすると、次のエラーが表示されます。メッセージ209、レベル16、状態1、プロシージャGETEXEMPTS、行59 「ID_Location」というあいまいな列名。 メッセージ209、レベル16、状態1、プロシージャGETEXEMPTS、行59 あいまいな列名 'iddown'。 選択行には? – neilrudds

+0

私はtを追加するコードを編集しました。プレフィックス – Jimbo

+0

優秀!!あなたのすべての協力に感謝します! – neilrudds

関連する問題