こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

別のデータベースのテーブルの統合 No.2

SQL Server 2005 Express で、別のデータベースへのテーブルの移行するにあたり、
INSERT INTO データベースB.dbo.テーブルX
SELECT * FROM データベースA.dbo.テーブルX
とすればよいというご回答をいただいています。

で、
IDENTITYを設定しているテーブルがあるとちょっと工夫が必要です。
とのコメントをもいただきましたが、
この「工夫」が分かりません。
どんな方法なのでしょうか?
IDENTITYをはずす方法や、リレーションシップをはずす方法などが思い浮かぶのですが、テーブル構造が複雑で、わけがわからなくなります。
元のIDの値は維持しなくてもよいので、何かよい方法はありますでしょうか?
よろしくお願いします。

投稿日時 - 2009-12-01 21:35:00

QNo.5490884

困ってます

質問者が選んだベストアンサー

TABLE1 (ID,F1,F2,F3)でIDにIDENTITYが付いていると仮定しますと、

方法1:番号が変わってもよい
INSERT INTO DB2.dbo.TABLE1 (F1,F2,F3)
SELECT F1,F2,F3 FROM TABLE1
GO

方法2:番号もそのままもっていく
SET IDENTITY_INSERT TABLE1 ON
GO
INSERT INTO DB2.dbo.TABLE1 (ID,F1,F2,F3)
SELECT ID,F1,F2,F3 FROM TABLE1
GO
SET IDENTITY_INSERT TABLE1 OFF
GO

いずれにしてもポイントはSELECT * FROM TABLE1ではだめで、フィールド名を羅列する必要があるということです。
なお、IDENTITY_INSERTは一度に1つのテーブルしかONにできませんので、念のため。

投稿日時 - 2009-12-01 22:28:43

お礼

ID列の番号が変わってもよい
ということは、どういうことを意味するのでしょうか?
リレーションシップが解けてしまうのでしょうか?
データベースとしての機能を外してID番号を外す以外には、
「番号をそのままもっていく」しかないのでしょう、か?

で、虫がよすぎるかもしれませんが、
リレーションシップなども考えずに(継承されて)、単純に「二つのデータベースを一つに合体する」という方法は、ないのでしょうか?

面倒がらずにやるしかないのでしょうけれど...。
この辺り、ご指導お願いします。

投稿日時 - 2009-12-02 20:44:30

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

>元のIDの値は維持しなくてもよいので、何かよい方法はありますでしょうか?

と書かれていたので、「IDの番号が変わってもよいからINSERTを成功させる方法」を紹介したまでです。
リレーションがある場合は、マスターのINSERTはうまくいきますが、参照元の方はINSERTで外部キーエラーになります。

リレーションシップを維持したいならば、後者の方法しかないでしょう。

投稿日時 - 2009-12-02 21:46:14