使用计算值和默认值插入 table
INSERT INTO a table with Computed and Default values
我有一个 TableA
,其中有几列,其中一列是 Computed
值,另一列是 DateTime
,默认值为 GETDATE()
.
然后我有另一个 table、TableA_Staging
,我想将其用作批量插入的原始转储 table。这个 table 看起来很像 TableA
,但有一些预期的差异,其中之一是它没有 Computed
或 DateTime
列。
完成对 TableA_Staging
的批量插入后,我现在需要将数据从 TableA_Staging
移动到 TableA
。我 运行 遇到了这两列的障碍。让我们假设 TableA
看起来像这样:
TableA
-----------
TableAId (INT non-unique, non-auto-incrementing PK)
Column1 (String PK)
Column2
ColumnComputed
ColumnDateTime
还有...
TableA_Staging
-----------
TableAID (this value populated in C# code)
Column1
Column2
现在,我正在尝试这样做:
INSERT INTO TableA
SELECT TableAID, Column1, Column2 FROM TableA_Staging WHERE TableAID > X
但是我得到这个错误:
Column name or number of supplied values does not match table definition.
我认为它在抱怨,因为我没有为 ColumnComputed
或 ColumnDateTime
提供任何东西?但如果是这样,我认为我不需要为它们提供值,因为一个是计算出来的,另一个有默认值。
您应该始终在插入语句中包含从 select 插入的列,否则您必须始终在插入语句中提供与 select 相同的列数。
此外,如果您的 TableID 是 autoincrement/identity,则无需包含它。
INSERT INTO TableA (TableBID, Column1, Column2)
SELECT TableAID, Column1, Column2
FROM TableA_Staging WHERE TableAID > X
我有一个 TableA
,其中有几列,其中一列是 Computed
值,另一列是 DateTime
,默认值为 GETDATE()
.
然后我有另一个 table、TableA_Staging
,我想将其用作批量插入的原始转储 table。这个 table 看起来很像 TableA
,但有一些预期的差异,其中之一是它没有 Computed
或 DateTime
列。
完成对 TableA_Staging
的批量插入后,我现在需要将数据从 TableA_Staging
移动到 TableA
。我 运行 遇到了这两列的障碍。让我们假设 TableA
看起来像这样:
TableA
-----------
TableAId (INT non-unique, non-auto-incrementing PK)
Column1 (String PK)
Column2
ColumnComputed
ColumnDateTime
还有...
TableA_Staging
-----------
TableAID (this value populated in C# code)
Column1
Column2
现在,我正在尝试这样做:
INSERT INTO TableA
SELECT TableAID, Column1, Column2 FROM TableA_Staging WHERE TableAID > X
但是我得到这个错误:
Column name or number of supplied values does not match table definition.
我认为它在抱怨,因为我没有为 ColumnComputed
或 ColumnDateTime
提供任何东西?但如果是这样,我认为我不需要为它们提供值,因为一个是计算出来的,另一个有默认值。
您应该始终在插入语句中包含从 select 插入的列,否则您必须始终在插入语句中提供与 select 相同的列数。
此外,如果您的 TableID 是 autoincrement/identity,则无需包含它。
INSERT INTO TableA (TableBID, Column1, Column2)
SELECT TableAID, Column1, Column2
FROM TableA_Staging WHERE TableAID > X