0

让我们考虑以下使用 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]只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表 'db1.table' 中的标识列指定显式值。*

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

等待您的回复。。

4

2 回答 2

2

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

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

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

于 2013-02-14T09:35:18.847 回答
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
于 2013-02-14T09:42:07.757 回答