古いDBのID列の値を保持しながら、あるDBから別のDBにデータを移動したい。ウィザードを実行すると、検証エラー「読み取り専用列「ChannelID」への挿入に失敗しました」が表示されます。
ここで、ChannelIDはそのテーブルのID列です。データをインポートできるようにするために、ID機能をオーバーライドするにはどうすればよいですか?
ID挿入を有効にする必要があります。 [マッピングの編集]をクリックすると、チェックボックスが表示されます。
Byte56の答えは正しいです-[マッピングの編集]画面で[IDの挿入を有効にする]をオンにします。 [ソーステーブルとビューの選択]リストは複数選択をサポートしているため、ShiftまたはCtrlを押しながらリスト内の複数のテーブルを選択できることを指摘したかっただけです。
列マッピングの編集で、IDENTITY INSERTを有効化にチェックマークを付けて、SQLの編集ボタンをクリックします。
変化する
[MyID] int NOT NULL,
に
[MyID] int IDENTITY(1,1),
MS Accessデータベースのインポートで機能します。これにより、ID列に変換されるオートナンバーフィールドのデータが保持されます。
SET IDENTITY INSERT ON
を使用して、IDENTITY列に値を挿入できるようにする必要があります
ここにMSDNへの リンク があります
SQL Server Management Studio 2017にアップグレードしました。[マッピングの編集]ダイアログの[IDを使用]チェックボックスをオンにしようとしましたが、機能しませんでした。既存のテーブルを更新するとき、ウィザードではSQLを編集できません。代わりに、ハードドライブにパッケージとして保存することができました。次に、メモ帳でファイルを編集して、「ID」を検索しました。案の定、プロパティはtrueに設定されています。これは、ファイル自体内のコメントによれば、ID列の値がソースからコピーされることを意味します。 falseに変更すると、宛先で値が自動生成されます。お役に立てれば。
SSMS 2008 R2を使用するSQL Server 2008 R2。
[マッピングの編集]でIDを有効にするだけでは、identity = trueは保持されません。各テーブルのSQLを手動で編集し、SQLコードにIDENTITYプロパティを含める必要があります。
例:ADD MS_IDENT numeric(18,0)IDENTITY NOT NULL、
私はこの解決策を見つけるために時間を費やしました
300以上のテーブルを持つアクセスデータベースがあり、SSMS2017インポートツールを使用して、各テーブルの構成を手動で編集しないと、プライマリキーと自動番号を保持することができませんでした。
最後に、bullzip製のツール(MS Access to MSSQL)を使用して、mssqlへのアクセスを変換できるようにしました(MySQLへのアクセス用のツールもあります)
このツールは、小さなテーブルがある場合はスクリプトを使用せずに、またはサーバーに直接、作業を行います。
すべてのIDはそのままで、オートナンバーもそこにあります。
仕事完了。