INSERT IN到具有Computed和Default值的表

问题描述 投票:0回答:1

我有一个TableA,其中有几列,其中一个是Computed值,另一个是DateTime,默认值为GETDATE()

然后我有另一个表,TableA_Staging,我想用它作为批量插入的原始转储表。这个表看起来很像TableA,有一些预期的差异,其中一个是它没有ComputedDateTime列。

一旦我完成了对TableA_Staging的批量插入,我现在需要将数据从TableA_Staging移动到TableA。我遇到了这两个专栏。让我们假设TableA看起来像这样:

TableA
-----------
TableAId (INT non-unique, non-auto-incrementing PK)
Column1 (String PK)
Column2
ColumnComputed
ColuomnDateTime

和...

TableA_Staging
-----------
TableAID (this value populated in C# code)
Column1 
Column2

现在,我正在尝试这样做:

INSERT INTO TableA
SELECT TableAID, Column1, Column2 FROM TableA_Staging WHERE TableAID > X

但我得到这个错误:

列名或提供的值数与表定义不匹配。

我认为这是抱怨,因为我没有为ColumnComputedColuomnDateTime提供任何东西?但如果是这样,我认为我不需要为它们提供值,因为一个是计算的,另一个是默认值。

sql sql-server tsql sql-server-2017
1个回答
5
投票

您应始终在insert语句中包含要从select中插入的列,否则您必须在insert中提供与select相同的列数。

此外,如果您的TableID是自动增量/标识,则不需要包含它。

INSERT INTO TableA (TableBID, Column1, Column2)
SELECT TableAID, Column1, Column2 
FROM TableA_Staging WHERE TableAID > X
© www.soinside.com 2019 - 2024. All rights reserved.