将具有计算值和默认值的表插入到表中

时间:2019-03-04 20:14:21

标签: sql sql-server tsql sql-server-2017

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

然后我有另一个表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提供任何内容?但是,如果是这样,我认为我不需要为它们提供值,因为其中一个是经过计算的,而另一个具有默认值。

1 个答案:

答案 0 :(得分:5)

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

此外,如果您的TableID是自动增量/身份,则无需添加该值。

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Builder(
        builder: (BuildContext context) {
          bloc.employeesAdded.listen(
            (_) {
              Scaffold.of(context).showSnackBar(
                SnackBar(
                  content: Text('Employee added'),
                ), // SnackBar
              );
            },
          );

          return _buildBody(bloc);
        },
      ), // Builder
    ); // Scaffold
  }