让我们考虑使用ODBC驱动程序连接到SQL Server的以下连接字符串:
Driver={SQL Server Native Client 10.0};Server=xxx.xx.xx.xx,xxxx;Database=mydata;Uid=xx;Pwd=xxxxxx;
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时指定。*
为了解决这个问题,我现在必须做些什么?
等待您的回复..
答案 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