使用标识列从临时 table 插入到 table

Insert from temp table to a table with identity column

我正在从 table 中抓取一些行,在临时 table 中处理它们,然后将它们作为新行插入到我的原始 table 中。

但是,我 运行 遇到了身份列的问题,即使我的临时 table 上没有身份列。标识列是一个自动递增的 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

如果您不想保留插入记录的 ID,则需要在 select 中指定除 ID 列之外的所有列。作为一般的良好做法,不要 select *,始终指定要检索-插入的列。

INSERT INTO OriginalTable (col1, col2, col3...)
OUTPUT MyIdentityColumn INTO @InsertedRows(NewSeqNum)
SELECT (col1, col2, col3...) FROM #TestTable

如果我理解你的话,我认为你的问题是你试图将'*'插入到原来的 table - 这意味着 all of您的专栏来自临时 table。包括您的 ID 列(您不想插入,因为您希望它自动生成。)

相反,我建议这样做:

Select [ColumnB],[ColumnC],[ColumnD],[Etc] into your temp table

Select [ColumnB],[ColumnC],[ColumnD],[Etc] into your original table.

... 又名,明确拼出列,并省略标识列。