2016-03-08 38 views
2

我有这个表SQL服务器:如何改变现有的AUTO_INCREMENT的列

CREATE TABLE [dbo].[MyTable] 
(
    [MyTableId] [int] IDENTITY(1,1) NOT NULL, 
    [Description] [varchar](50) NOT NULL, 
    CONSTRAINT [PK_MyTable] 
     PRIMARY KEY CLUSTERED ([MyTableId] ASC) 
) 

它已经拥有了IDENTITY (1,1)。我想要的是将自动增量更改为2而不是1.我该怎么做?

我发现一些答案,说我需要删除列并创建一个新的,但我不知道是否有一个更简单的解决方案。另外,我发现我可以使用SSMS - >工具 - >选项 - >设计器 - >表和数据库设计器来实现,但我想要的是我可以作为SQL脚本运行的脚本。

谢谢!

+0

您的表格是否已经有数据?如果是这样,你想更新它吗?如果不是,您可以在设计器中对其进行修改并生成更改脚本。 – Tanner

+1

您是否知道SSMS中的大多数设计器操作都可以保存为[SQL脚本](https://msdn.microsoft.com/zh-cn/library/efhhffxd.aspx)?这是查看SSMS在幕后生成的SQL的好方法。右键单击表设计器,然后从上下文菜单中选择*生成更改脚本*。在弹出的新对话框中,您可以查看/保存/复制SQL语句。此时你仍然可以退出,所以如果你不想让它们成为现实,那么这些更改就不会被提交。 –

+0

@EuphoriaGrogi这个问题已经在该帖子中的答案。 –

回答

0

对不起,您无法更改现有identity列中的增量。

正如您所怀疑的;过程如下:

  1. 创建新表。
  2. (可选)迁移现有数据。
  3. 拖放旧桌子。
  4. 重命名新表。

需要一个新表,因为无法更新现有标识,并且SQL Server只允许one identity column per table

-- Orginal table, with identity column. 
CREATE TABLE Original 
    (
     X  INT IDENTITY(1, 1) 
    ) 
; 

-- New table, with updated identity column. 
CREATE TABLE New 
    (
     X  INT IDENTITY(2, 1) 
    ) 
; 

/* Transfer existing values. 
* Identity insert is require to preserve existing 
* keys. 
*/ 
SET IDENTITY_INSERT New ON; 

    INSERT INTO New 
     (
      X 
     ) 
    SELECT 
     X 
    FROM 
     Original 
    ; 

SET IDENTITY_INSERT New OFF; 

-- Drop original table. 
DROP TABLE Original; 

-- Rename new. 
EXECUTE sp_rename 'New', 'Original'; 

编辑

  1. 正如下面SSMS的评论指出,可以为你自动完成这一过程。
  2. 添加了示例代码和更多详细信息。
  3. 删除可添加新标识列的语句,SQL Server仅支持每个表一个。
+0

我使用SSMS完成了这个任务,而不会丢失 – Sherlock

+1

幕后SSMS创建一个新表,将所有数据从旧表移动到新表,然后删除旧表,然后重命名新表。您可以通过查看更改脚本或运行SQL Profiler来查看。 –