将行插入带有标识的SQL Server时出错

时间:2013-02-14 09:33:12

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

让我们考虑使用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;

我收到错误:

  

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

为了解决这个问题,我现在必须做些什么?

等待您的回复..

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

当用户尝试将包含特定标识值的行插入包含标识列的表时,会发生此错误。根据您的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