【问题标题】:Error while inserting row into SQL Server with identity将行插入具有标识的 SQL Server 时出错
【发布时间】:2013-02-14 09:33:11
【问题描述】:

让我们考虑以下使用 ODBC 驱动程序连接到 SQL Server 的连接字符串:

Driver={SQL Server Native Client 10.0};Server=xxx.xx.xx.xx,xxxx;Database=mydata;Uid=xx;Pwd=xxxxxx;
  • 数据库类型:SQL Server
  • 驱动程序:SQL Server - ODBC 本机客户端 10.0
  • 提供者类型:System.Data.Odbc

我正在执行这个命令:

SET IDENTITY_INSERT db1.table ON;

INSERT INTO db1.table 
   SELECT * FROM db.table

SET IDENTITY_INSERT db1.table OFF;

我收到错误:

*ERROR [23000] [Microsoft][SQL Server Native Client 10.0][SQL Server]An 表 'db1.table' 中标识列的显式值只能 在使用列列表并且 IDENTITY_INSERT 为 ON 时指定。*

我现在必须做什么才能解决问题?

等待您的回复..

【问题讨论】:

  • 错误信息已经够清楚了。您需要在 INSERT...SELECT 语句中指定每个目标和源列。

标签: .net sql-server sql-server-2008-r2 odbc


【解决方案1】:

您必须明确列出要插入的列:

INSERT db1.table(IdColumn, Column1, Column2)
SELECT IdColumn, Column1, Column2
FROM db.table

无论如何,您都应该将列名指定为标准做法,以避免出现错误(例如列未对齐、添加了新列等)。使用 IDENTITY_INSERT 时,这实际上是由 SQL Server 根据错误消息强制执行的。

【讨论】:

    【解决方案2】:

    当用户尝试将包含特定标识值的行插入到包含标识列的表中时,会发生此错误。根据您的 SQL 语句运行以下命令:

    在您的 SQL 语句之前:

    SET IDENTITY_INSERT <tablename> ON
    

    --您必须为您的 INSERT 语句制作一个列列表:

    INSERT Into tableA ([col1], [col2], [col3], [col4], [col5] ) 
    SELECT [col1], [col2], [col3], [col4], [col5] FROM tableB
    

    不喜欢:

     "INSERT Into tableA SELECT ........"
    

    在你的 SQL 语句之后:

    SET IDENTITY_INSERT <tablename> OFF
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多