テーブルからいくつかの行を取得し、一時テーブルでそれらを操作してから、それらを元のテーブルに新しい行として挿入します。一時テーブルからID列のテーブルへの挿入
しかし、私は自分の一時テーブルにID列がない場合でも、ID列の問題が発生しています。 ID列は自動インクリメントintです。
これは簡単なことですが、私は思うように思っています。
select top 0 *
into #TestTable
from OriginalTable;
...
--insert and manipulate records
...
ALTER TABLE #TestTable
DROP COLUMN MyIdentityColumn;
DECLARE @InsertedRows TABLE (NewSeqNum INT);
INSERT INTO OriginalTable
OUTPUT MyIdentityColumn INTO @InsertedRows(NewSeqNum)
SELECT * FROM #TestTable
が、私はこのエラーを取得:
An explicit value for the identity column in table 'OriginalTable' can only be specified when a column list is used and IDENTITY_INSERT is ON.
私は絶対に私はそれが(@InsertedRows
経由)
*を値として使用しないでください。列を明示的に記述する必要があります。あなたのケースでは、パーサーはすべてのステップを論理的に評価しないので、これは失敗します。 MyIdentityColumnは#TestTableの列であり、挿入しようとしていると考えています。あなたのコードを明示してください。 INSERTステートメントの列と、その値に使用するSELECTステートメントの列を指定します。 –
@SeanLangeには動的な方法がありますか?スキーマからカラム名を選択して、identカラムを削除して、 '*'の代わりにそのカラム名を使用することはできますか? –
列は常に一覧表示する必要があります。列数が多い場合は、SSMSの列「フォルダ」をクエリウィンドウにドラッグできます。明示的にリストされている列以外のものは、遅延があり、表が変更されたときにエラーを起こす傾向があります。 –