SQL 服务器:如何更改已存在的 auto_increment 列

SQL Server : how to alter already existing auto_increment for a column

我有这个table

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 -> 工具 -> 选项 -> 设计器 -> Table 和数据库设计器来完成它,但我想要的是我可以 运行 作为 SQL脚本。

谢谢!

修改后的答案

您可以使用 DBCC CHECKIDENT 重新播种 table:

DBCC CHECKIDENT ('dbo.MyTable', RESEED, <some-number>);

原答案

抱歉,您无法更改现有 identity 列的增量。

如你所料;过程是:

  1. 新建table.
  2. 可以选择迁移现有数据。
  3. 放弃旧的 table.
  4. 重命名新 table.

需要一个新的 table,因为无法更新现有身份并且 SQL 服务器只允许 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 服务器仅支持一个 table。