トップ回答者
IDENTITY列を持つテーブルに対してSSISでデータを移行したい。

質問
-
お世話になっております。
IDENTITY列を持つTESTテーブルに対して、同様のテーブルTEST2(10万件くらいデータが存在する)からSSISを使用してデータ移行を行おうとしています。
CREATE TABLE [dbo].[TEST] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[UserID] [nvarchar] (255) COLLATE Japanese_CI_AS NOT NULL
)
が、このまま実行すると、
エラー 0xc0202049:
DTS_E_ATTEMPTINGTOINSERTINTOAREADONLYCOLUMN
読み取り専用の列 "__" に挿入できませんでした。
と言われてエラーとなってしまいます。このような場合、どういった方法で回避すればよいのでしょうか?
識者の方教えてください。
よろしくお願いします。
回答
すべての返信
-
セルフレスです。上記のやり方、ご存知の方いませんか?SQLCMDを使用して行えばある程度簡単で、こんな形で可能であることは、わかりました。
use TESTDB
SET IDENTITY_INSERT dbo.TEST ON
goIF NOT EXISTS(SELECT SEQ_NO FROM dbo.TEST)
INSERT INTO dbo.TEST (OUTLINE, SEQ_NO)
SELECT OUTLINE, SEQ_NO FROM [192.168.0.10].[TESTDB].[dbo].[TEST]
go
SET IDENTITY_INSERT dbo.TEST OFF
これと同等な処理をSSISで行いたいのです。IDENTITYを持つテーブルが、移行対象となるテーブルのうち、100テーブルくらいあるので、なるべくSSISで処理したいと考えています。
少しでもご存知の方、情報をください。
よろしくお願いします。 -
情報、ありがとうございます。
>ただ...Transact-SQLを書ける人にとって、一度の移動のためにSSISパッケージで実装することが効率的なのかどうかは分かりません。
この一文が何よりのヒントになりました。顧客からDTSがあるから・・・という事を言われていたので鵜呑みにして調査していましたが、どうやってもこのツールが効率的にデータ移行を行えるとは思えなくて困っていました。(設定が一直線で、途中で変更できない、(チェック付けてるのに)エラーを無視したくても出来ない、移行が半端で、でエラーになると以後のテーブルが失敗する、その割には以前のテーブルにはデータが入ってしまうのでそこを消す事から再度やり直す羽目になる・・・など)
自前でスクリプトを書くか、スクリプトを生成するexcelマクロを書いたほうが良さそうだと判断しました。