我正在尝试执行此查询
INSERT INTO dbo.tbl_A_archive SELECT * FROM SERVER0031.DB.dbo.tbl_A
但即使在我跑了之后
set identity_insert dbo.tbl_A_archive on
我收到此错误消息
只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表 ‘dbo.tbl_A_archive’ 中的标识列指定显式值。
tbl_A在行和宽度上是一个巨大的表格,即它有很多列。我不想手动输入所有列。我怎样才能让它工作?
tbl_A
概括
SQL Server 不允许您在标识列中插入显式值,除非您使用列列表。因此,您有以下选择:
或者
tbl_A_archive
解决方案 1 的详细信息
代替
SET IDENTITY_INSERT archive_table ON; INSERT INTO archive_table SELECT * FROM source_table; SET IDENTITY_INSERT archive_table OFF;
你需要写
SET IDENTITY_INSERT archive_table ON; INSERT INTO archive_table (field1, field2, ...) SELECT field1, field2, ... FROM source_table; SET IDENTITY_INSERT archive_table OFF;
包含field1, field2, ...表中所有列的名称。
field1, field2, ...
解决方案 2 的详细信息
不幸的是,不可能仅将标识 int 列的“类型”更改为非标识 int 列。基本上,您有以下选择:
Identity Specification
(Is Identity)``No``Tools``Options``Designers``Table and Database Designers``Prevent saving changes that require table re-creation