2016-03-22 11 views
0

私は2つのテーブルを持って更新します。 既存のdataRecord(dataRecordID 'id1'は既にDataRecordテーブルに存在します)で、(ほぼすべての)更新が実行されると、DataRecordArchiveテーブルに既存のdataRecord(id: 'id1'バージョン:0)が挿入され、dataRecordが更新され、バージョンは1に変わります(バージョン2、3などに変わります)。したがって、最後のテーブルDataRecordArchiveテーブルのレコードはid: 'id1'とバージョン:0で、DataRecordテーブルのレコードはID: 'id1'とバージョン:1です。基準による2つのテーブルのいずれかからレコードを選択する方法、それは

dataRecordをいくつかの値(bool値 - 行をDataRecordArchiveテーブルに複製する必要はありません。たとえば 'correctFlag')ですが、IDとバージョンがあるため、更新するテーブルを選択する必要があります。更新するレコードがある可能性があります。 DataRecordテーブルまたはDataRecordArchiveテーブルに格納されます。たとえば、dataRecordをid1バージョン0で更新する必要がある場合、そのレコードはDataRecordArchiveテーブルにあります。 id1バージョン1でdataRecordを更新する必要がある場合、レコードはDataRecordテーブルにあります。

何かのように:次に、ID = 'ID1' およびバージョン= 0> 0 DataRecord選択数()ID = 'DataRecordArchiveからDataRecordから

更新場合SELECT COUNT() ID1' とバージョン=> 0は、その後 DataRecordArchive エンド セットcorrectFlag = 1のid = 'ID1' とバージョン= 0

このアップデートのための正しいSQLなステートメントとは何ですか?

+0

動的SQLは、私が望むほどエレガントではありません。これが唯一の方法であれば、私はそれを行います。 –

答えて

1

2つのテーブルを結合するビューを作成します。 ビューを更新します。

1

コメントは投稿できませんので、回答として投稿します。理想的には、テーブルの構造が必要です。テーブルのサンプルデータが正しく示唆されます。しかし、限られた情報に基づいて、私は動的SQLを使用することをお勧めします。ダイナミックSQLを使用して、条件に基づいてSQLクエリのfrom句を操作します。

正確なクエリを使用できるように、テーブル構造とサンプルデータを投稿してください。

0

SPを作成する必要があります。そのSPでは、テーブルを更新できるバージョンに基づいて、データを渡してデータをチェックすることができます。例えば

create procedure update_data 

@version @int, 
@id int, 

As 

if @version == 1 
-- update in table1 
else 
-- update in table2 

GO 
関連する問題