这是我正在尝试做的事情:
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.
任何人都可以告诉我我做错了什么或者我应该如何解决这个问题?
答案 0 :(得分:7)
您创建的表没有标识列。如果您检查发布的代码,您会注意到没有声明身份。我认为你混淆了PRIMARY KEY
和IDENTITY
的概念。它们是截然不同的。您无法使用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列。