SQL Server - 在生成的表上自动增量

时间:2012-01-13 20:08:14

标签: sql-server

这是我正在尝试做的事情:

SELECT * INTO new_table FROM old_table WHERE 1=2;
ALTER TABLE new_table ADD CONSTRAINT pk_new_table_id PRIMARY KEY(id);
SET IDENTITY_INSERT new_table ON

基本上,我想根据现有结构创建一个新表,然后打开ID字段的自动增量。但是,当我尝试插入行时,我得到了这个:

Table 'new_table ' does not have the identity property. Cannot perform SET operation.

任何人都可以告诉我我做错了什么或者我应该如何解决这个问题?

5 个答案:

答案 0 :(得分:7)

您创建的表没有标识列。如果您检查发布的代码,您会注意到没有声明身份。我认为你混淆了PRIMARY KEYIDENTITY的概念。它们是截然不同的。您无法使用SELECT ... INTO ...

创建具有标识列的表

答案 1 :(得分:2)

该列需要使用“identity(1,1)”选项指定。第一个是起点,第二个是增量。

答案 2 :(得分:2)

设置identity_insert并不会实际执行您认为的操作。它会禁用自动增量(暂时),以便您可以在其中硬编码值。

以下是有关... http://msdn.microsoft.com/en-us/library/aa259221(v=sql.80).aspx

的更多信息

答案 3 :(得分:1)

首先,您必须在不使用“select ... into”的情况下创建新表,并将该列指定为标识列。

在复制数据之前使用“set identity_insert .. on”。然后,当你完成时“设置identity_insert ... off”。

如果您想在第一部分作弊,可以使用管理工作室。右键单击原始表...转到设计器。为所需列添加标识选项。然后保存脚本但不提交。可能想要操纵新生成的脚本来创建新表。如果您不得不重复这样做,还有其他更复杂的解决方案。但到目前为止这是最简单的。

答案 4 :(得分:0)

这可能是问题所在:

ALTER TABLE new_table ADD CONSTRAINT pk_new_table_id PRIMARY KEY(id, idColumn);

指定id列。