代码之家  ›  专栏  ›  技术社区  ›  A.sharif

执行SqlCommand。ExecuteNonQuery()是否在错误之前插入前一行?

  •  0
  • A.sharif  · 技术社区  · 8 年前

    我在sql server中创建了一个临时表。我有要从临时表插入到另一个表的sqlcommand对象的commandText。我的问题是:它是否在到达错误行之前插入行?

    例如,假设诱惑表中有1000行,表中有0行。我从《诱惑》插入到《tableA》。第999行出错,引发异常。tableA里面有989行吗?还是0?

    我试过用谷歌搜索这个问题,但什么也没找到。我还阅读了 SQLCommand.ExecuteNonQuery() 还没有找到答案。如果有任何帮助或线索,我将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  4
  •   squillman Johnny Fitz    8 年前

    自从你 INSERT 是单个语句,则为否。tableA中将有0行。

    如果一批中有多条语句,则每个成功执行的语句都将执行请求的修改,但出错的语句除外,这将使表保持上一批完成时的状态。

    如果将上面提到的多语句批包装在 TRANSACTION 然后,一般来说,如果其中一条语句出错,您可以将整个批回滚到执行任何语句之前的状态。

    注:这也是一般情况。有许多外部因素会使数据处于不一致的状态(服务器故障、IO损坏等),在这种情况下,SQL server将尝试从事务日志中回滚数据。

    这是一个单独的声明

    INSERT tableA (col1,col2,col3)
    SELECT col1,col2,col3
    FROM #tmpTable;
    

    此处出现错误(例如数据类型不匹配, NULL a上的值 NOT NULL 列等)将导致在tableA中插入0行。