如何在SQL Server 2012中从表中删除自动递增

13

我已在 SQL Server 2012 中创建了一个主键为自动增量的表。但是,我如何使用 SQL 查询从表中删除该自动增量属性呢?


http://stackoverflow.com/questions/8834433/remove-auto-increment-by-script-sql-server - slavoo
删除主键约束,删除列 - 没有办法仅从现有列中删除“IDENTITY”规范.... - marc_s
https://dev59.com/v2sy5IYBdhLWcg3w6yQN - MarkD
6个回答

14
如果您需要保留该列中的数据,请在表格上创建一个新的列,该列类型相同(但名称不同),将要删除的列中的数据复制到新列中,删除旧列并重命名新列。完整示例:
CREATE TABLE test(col1 INT IDENTITY (1,1) NOT NULL, col2 VARCHAR(10) NULL);

ALTER TABLE test ADD col3 INT NULL;

UPDATE test SET col3 = col1;

ALTER TABLE test DROP COLUMN col1;

EXEC sp_rename 'dbo.test.col3', 'col1', 'COLUMN';

13
最简单的方法是:
  1. 打开 SQL Server Management Studio
  2. 定位 服务器 > 数据库 > 表。
  3. 右键单击该表 > 选择设计。
  4. 在设计窗口中,将所需修改的列高亮显示。
  5. 列属性 窗口中浏览到 标识规范 > 是否为标识 并设置为 No
  6. 转到工具栏菜单 > 表设计器 > 选择 生成更改脚本...
  7. 完成,您已经得到了所请求的脚本。
我喜欢使用这种方法来获取脚本,因为它允许我生成我不确定如何从头开始组成的脚本,从而学习和提高我的技能...

6
我收到了“无法保存更改”的提示。 - Savage
如果Is Identity=True/Yes,你不能删除该列而不放弃该列。 - Ben

6

我花了很多时间寻找一个简单的解决方案来删除自动增量,因为如果我删除列和主键,这将是一件很麻烦的事情,由于该主键是另一个表中的外键,我还需要删除正在使用我的外键的数据...最终,我找到了一个非常简单的解决方案,使我的生活变得轻松:

SET IDENTITY_INSERT <table_name> ON ;

这是暂时关闭,可以打开。因此自动增量不会被删除。 - tibi

6
如果它是主键列,则必须先删除主键。如果有任何引用它的表,则必须删除这些外键才能删除主键。之后,添加另一个相同类型的列,使用自增列中的值来更新它,删除自增列,使用sp_rename过程将新列重命名为自增列的名称,重新创建主键、外键,并检查是否一切都正确无误。
在生产数据库上进行此操作时要非常小心。确保在执行此操作时没有人可以访问数据。

0

您可以使用以下查询语句来删除“auto_increment”...

ALTER TABLE <table_name> MODIFY <auto_incremented_column_name> <column_data_type>;

例如,
table_name = 学生,
auto_incremented_column_name = ID,
column_data_type = 整数
ALTER TABLE STUDENT MODIFY ID INT;

添加'auto_increment'

ALTER TABLE STUDENT MODIFY ID INT AUTO_INCREMENT;

0

SET IDENTITY_INSERT [TABLE] OFF .. 这允许将自动增量设置为关闭状态,以便我们必须在该列中输入值。


9
不,它不会 - 这意味着您不能直接插入该列。您需要将 IDENTITY_INSERT 设置为 ON 以覆盖自动编号。此外,这并不是真正的正确解决方案,因为它没有删除列的身份规范,并且未来可能会打开它,带来潜在的不良或甚至危险后果。 - Steve Pettifer

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