2009-07-28 2 views
2

問題は、通常、内部の親子関係を持つテーブルが多い古いデータベースがあることです。これらのテーブルは新しいデータ構造に移行されていますが、古い関係を維持したいと考えています。今日私はこれを次のようにしています:一時的な列を使用せずに移動操作の一部としてparentIDを更新することはできますか?

もっと簡単な方法がありますか?

答えて

2

IDは、ID列であるとcontract_pkと同じ型を持っている、あなたは古い値で自動生成されたID列を上書きできるようにするためにSET IDENTITY_INSERT ONを使用することができますと仮定:

SET IDENTITY_INSERT contract ON 

INSERT INTO contract (ID, contract_parent_id, [name]) 
SELECT contract_pk, contract_parent_id, contract_name FROM dbo.tbl_contract 

SET IDENTITY_INSERT contract OFF 

は、あなたがFKを持っていると仮定すると、 contract_parent_idに制約がある場合は、最初にそれを無効にしてから、挿入後に再び有効にする必要があります。

+0

それはうまくいくだろうが、私はpkの1,2,3,8,9があると言うとこれがどのように機能するのかちょっと疑念がある。次回は、SQL ServerがどのIDを挿入するのですか? 4または10? – devzero

+0

@devzero - ドキュメントによると、10のように見えます: "挿入された値がテーブルの現在のID値より大きい場合、SQL Serverは自動的に新しい挿入値を現在のID値として使用します。 –

関連する問題