1

私は2つのテーブルを持っています:

new_table

ID | 親 ID | f1 | f2 | 顧客ID

initial_table (customerid はありません)

ID | 親 ID | f1 | f2

私がする必要があるのは、すべての項目を initial_table から new_table に移動することです。ただし、id の変更 (自動生成) は new_table!

--

だから、私の考え(今のところ)は:

1 - initial_table を除くすべてのデータを new_table に移動しidますparentid

2 - lookup_table を使用する

ID | 元の親 ID | 新しい親 ID | 顧客ID

parentid3 - lookup_table を調べて、new_tableのparentid 列を新しい値で更新します。

--

それで...

質問 - 1 - これは正しい方法ですか?

質問 - 2a - はいの場合、どのように行うのですか?

質問 - 2b - いいえの場合、どのようにしますか?

2の問題は、トリガーからこれを行っていることでcustomeridありSELECT @customerid = id FROM inserted、これは問題ありません。それから私はやっています

INSERT INTO new_table (f1, f2, customerid)
SELECT f1, f2 @customerid FROM initial_table

しかし、そのようにすると、new_table から新しい ID を取得できません。

--

ですから、このトリガーを書くのを手伝ってください:

IDが変更されるという問題で、initial_tableからnew_tableにすべてのデータをコピーする必要があり、それに応じてnew_tableでparentidを更新する必要があります

thnx

--

これが私の現在のトリガーです:

ALTER TRIGGER Copy
ON dbo.Customers

FOR INSERT
AS

BEGIN TRANSACTION

/* variables */
DECLARE
    @customerid bigint

SELECT @customerid = id FROM inserted

/* insert all for this customer */
INSERT INTO new_table (f1, f2, customerid)
    SELECT f1, f2 @customerid FROM initial_table

/* TODO: add entries to lookup table */

/* TODO: fix the pages' parentid's */

/* execute */
COMMIT TRANSACTION

GO
4

1 に答える 1

3

IDENTITY INSERT最初の挿入をオフにして、この混乱全体を回避します。それができない理由はありますか?このような何かがそれを行う必要があります:

SET IDENTITY_INSERT dbo.Customers ON

次に、完了したら実行します

SET IDENTITY_INSERT dbo.Customers OFF
于 2012-05-18T16:51:49.200 に答える