[解決済み】テーブルのID列に明示的な値を指定できるのは、列リストを使用し、IDENTITY_INSERTがONの場合のみです SQL Server
2022-04-03 06:02:57
質問
私はこのクエリを実行しようとしています
INSERT INTO dbo.tbl_A_archive
SELECT *
FROM SERVER0031.DB.dbo.tbl_A
を実行しても
set identity_insert dbo.tbl_A_archive on
このようなエラーメッセージが表示されます。
<ブロッククオートテーブル 'dbo.tbl_A_archive' の ID 列の明示的な値は、列リストを使用し、IDENTITY_INSERT が ON の場合にのみ指定できます。
tbl_A
は、行と幅が巨大なテーブルで、つまり多くの列があります。すべての列を手動で入力するのは嫌です。どうしたらうまくいくでしょうか?
どのように解決するのですか?
概要
SQL Server は、列リストを使用しない限り、ID 列に明示的な値を挿入することを許可しません。したがって、以下のオプションがあります。
- 列リストを作成する(手動またはツールを使用、下記参照)
または
-
の ID カラムを作成します。
tbl_A_archive
を通常の 非同一性 カラムを使用します。テーブルがアーカイブテーブルで、常に ID 列に明示的な値を指定している場合、なぜ ID 列が必要なのでしょうか? 代わりに普通のintを使えばいい。
ソリューション1の詳細
の代わりに
SET IDENTITY_INSERT archive_table ON;
INSERT INTO archive_table
SELECT *
FROM source_table;
SET IDENTITY_INSERT archive_table OFF;
を書く必要があります。
SET IDENTITY_INSERT archive_table ON;
INSERT INTO archive_table (field1, field2, ...)
SELECT field1, field2, ...
FROM source_table;
SET IDENTITY_INSERT archive_table OFF;
と
field1, field2, ...
には、テーブルのすべてのカラムの名前が含まれています。もしカラムのリストを自動生成したいのであれば
Daveの回答
または
アンドマーさんの回答
.
ソリューション2の詳細
残念ながら、identity int 型のカラムを非identity int 型のカラムに変更すること(quot;type")はできません。基本的には、以下のような選択肢があります。
- アーカイブテーブルにまだデータがない場合、そのカラムを削除し、IDなしの新しいカラムを追加します。
または
-
SQL Server Management Studio を使用して
Identity Specification
/(Is Identity)
プロパティを、アーカイブ・テーブルの ID カラムのNo
. 裏側では、テーブルを再作成して既存のデータをコピーするスクリプトが作成されるので、そのためにTools
/Options
/Designers
/Table and Database Designers
/Prevent saving changes that require table re-creation
.
または
- この回答で説明されている回避策のいずれかを使用してください。 テーブルの列からIdentityを削除する
関連
-
[解決済み] 管理者ユーザーで有効なxp_cmdshellへのアクセスが拒否されました。
-
[解決済み] 分散型トランザクションを開始できない
-
[解決済み] SSISで新しいレコードを挿入する前に、宛先テーブルを空にするにはどうすればよいですか?
-
[解決済み] 変数に値を代入するSELECT文は、データ検索操作と組み合わせてはいけません。
-
[解決済み] データセットに対するSSRSクエリの実行に失敗しました
-
[解決済み] UPDATEエラーです。"REPLACEの引数1の引数データ型textは無効です"
-
[解決済み] SQL Serverでテーブルからカラム名を取得するにはどうすればよいですか?
-
[解決済み] SQL Serverで、指定したテーブルを参照しているすべての外部キーを一覧表示するにはどうすればよいですか?
-
[解決済み] T-SQLでテーブル変数をSELECT INTOする
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】各GROUP BY式は、外部参照でない列を少なくとも1つ含む必要があります。
-
[解決済み] SQL Server xp_delete_file パラメータ
-
[解決済み] TABLOCKとTABLOCKXの比較
-
[解決済み] Sqlサーバーに制約が存在するかどうかを確認する方法は?
-
[解決済み] BCP - IDENTITY列を持つテーブルにインポートする際、キャスト指定に無効な文字値がある。
-
[解決済み] シンプルに保つ、クエリで複数のCTEを行う方法
-
[解決済み] SQL ServerでBegin / End BlocksとGoキーワードを使用する?
-
[解決済み] MS SQL Serverで数値をパーセントでフォーマットする
-
[解決済み] SQL Server Management StudioでIntelliSenseが機能しない
-
[解決済み] テーブルのカラムからIdentityを削除する