无法在Sql Server表中将身份规范更改为是

33

这可能是一个愚蠢的问题,但为什么我不能将Identity Specification或(Is Identity)从“否”更改为“是”?


是的,这是一个愚蠢的问题。主键列没有被突出显示。 - malckier
10个回答

38

检查您的列数据类型。

如果它是varchar,则无法更改标识列。

要更改标识列,它应该具有int数据类型。


19
您可以禁用选项"防止保存需要表重新创建的更改",但这在MSDN上强烈不推荐。
要执行此操作,请转到:
工具->选项->设计者
然后取消选中:"防止保存需要表重新创建的更改"。

如果您注意到我的问题评论,我已经找出了问题所在。 - malckier
救命稻草,谢谢。 - undefined

16

无法更改现有表中列的IDENTITY属性。你可以添加一个具有IDENTITY属性的新列,删除旧列,然后使用旧列的名称重命名新列。

当然,对于某些人来说,接下来发生的事情是他们不喜欢新列出现在列列表的“末尾”(即使您不应该关心列的位置 - 您应始终使用它们的名称)。在这种情况下,您需要在更高的级别上执行相同的技巧-创建一个新表(已更改列定义),将数据从旧表复制到新表,删除旧表,然后重命名新表。

我认为SSMS仍然试图假装这是可能的,通过在幕后执行第二个技巧。


13

同时检查确保该列上没有默认值或绑定。


2
这是我个人认为的这个问题的真正答案。 - Bogdan Bogdanov

4

移除默认值或绑定。


1

继Damien_The_Unbeliever上面的评论后,您可以在Visual Studio的设计界面中编辑列顺序。

我已成功完成此操作。要确认,步骤如下:

  1. 添加一个带有IDENTITY属性的新列
  2. 删除旧列,
  3. 将新列重命名为旧列的名称。
  4. (可选)重新排序列以从Visual Studio获取IDENTITY列。

1
我的解决方案是将数据类型从默认的nchar更改为int。此外,我需要刷新我的数据库服务器连接才能使其正常工作。

column properties


0

我认为首先您必须勾选(isIdentity)复选框,然后才能勾选身份规范复选框。


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0
找到这个解决方案花了我一些时间,起初我试图找到一种方法来改变这里的值(是的,因为我能够使用下面的方法来改变它)

在此输入图片描述

但后来通过右键点击 -> 属性 -> 表设计器 -> 选择标识列

enter image description here

这样做将“身份规范”设置为“是”


0

As you can see the yes value for the identity specification is disabled so the other answers above is not applicable for me but following Joy's answer, I saw that I really had a Default Value or Binding. I just omitted the default value and everything i neede was enabled.

正如您所看到的,对于身份规范,yes值已被禁用,因此上面的其他答案对我不适用,但是根据Joy的回答,我发现我真的有一个默认值或绑定。 我只是省略了默认值,然后一切都可以了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接