2016-05-19 2 views
0

「ID」と「最後に変更された」の2つの主キーがあります。プライマリキーの増分値に値を割り当てるSQLサーバー

ID |  last modified  |value1|value2|value3|...|value_n| 
    -- |---------------------------|------|------|------|---|-------| 
    1 | 2011-10-01 13:03:00.000 |................................| 
    2 | 2011-10-01 14:03:00.000 |................................| 

Imが異なるテーブルからそれらの新しい行を追加するので、私は更新したいと思います:

IDが増分であるアイデンティティである私は、新しい行を追加していたとき、つまり、それは次のようになりますいくつかの条件まで行を作成し、同じIDを参照する新しい行を追加したいと考えています。私は例を挙げます:

ID = 1、新しい行。 ID = 2、新しい行。

条件によっては、同じID(ID = 2)を参照する新しい行を挿入し、最終変更日時も変更することがあります。

ID |  last modified  |value1  |value2|value3|...|value_n| 
    -- |---------------------------|------  |------|------|---|-------| 
    1 | 2011-10-01 13:03:00.000 |................................  | 
    2 | 2011-10-01 14:03:00.000 |old value..|.....................  | 
    2 | 2011-10-01 15:03:00.000 |other value|.........................| 

その後、いくつかの条件は、それが最後に変更時間を取り、それを更新し、また、最後に変更を更新します(この場合、ID = 2、特定のIDを参照)行を更新するために導きます日時:ただし

ID |  last modified  |value1 |value2|value3|...|value_n| 
    -- |---------------------------|---------|------|------|---|-------| 
    1 | 2011-10-01 13:03:00.000 |................................ | 
    2 | 2011-10-01 14:03:00.000 |................................ | 
    2 | 2011-10-01 16:03:00.000 |new value|.........................| 

、私はID欄に同じIDを割り当てても、それは割り当てを無視し、それがこのillustating、IDが増加して、新しい行を追加しています:

しかしながら

IF (SELECT COUNT(*) FROM myTable WHERE myColumn = @myValue) = 0 
    --change value 
    BEGIN 
     INSERT INTO myTable(ID, value1,value2...) VALUES (@ID, value1,value2..) 
    END 

、それはPKがautoincremental値PKであるので、私が言ったように割り当てる(ID = @ID)は、実際assingningされない:10

はIコードを添付する。

どうすればいいですか?何か案は?

+0

あなたは2つの主キーを持っていますか? –

+1

ID列を混乱させないでください。代わりに、parentId列を保持し、それに親行のid列の値を代入します。新しい列の場合はnullにしておきます。 –

答えて

1

値を挿入するテーブルにIDインサートを設定してからレコードを挿入する必要があります。

SET IDENTITY_INSERT YourTableName ON