• ベストアンサー

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

SQL Server 2005 Express で、別のデータベースへのテーブルの移行するにあたり、 INSERT INTO データベースB.dbo.テーブルX SELECT * FROM データベースA.dbo.テーブルX とすればよいというご回答をいただいています。 で、 IDENTITYを設定しているテーブルがあるとちょっと工夫が必要です。 とのコメントをもいただきましたが、 この「工夫」が分かりません。 どんな方法なのでしょうか? IDENTITYをはずす方法や、リレーションシップをはずす方法などが思い浮かぶのですが、テーブル構造が複雑で、わけがわからなくなります。 元のIDの値は維持しなくてもよいので、何かよい方法はありますでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

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にできませんので、念のため。

yasheeki
質問者

お礼

ID列の番号が変わってもよい ということは、どういうことを意味するのでしょうか? リレーションシップが解けてしまうのでしょうか? データベースとしての機能を外してID番号を外す以外には、 「番号をそのままもっていく」しかないのでしょう、か? で、虫がよすぎるかもしれませんが、 リレーションシップなども考えずに(継承されて)、単純に「二つのデータベースを一つに合体する」という方法は、ないのでしょうか? 面倒がらずにやるしかないのでしょうけれど...。 この辺り、ご指導お願いします。

その他の回答 (2)

  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.3
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

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

関連するQ&A