SQL Server:如何修改已存在的自增列?

3

我有这个表格

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脚本运行的脚本。

谢谢!


1
你知道在SSMS中,大多数设计师操作都可以保存为SQL脚本吗?这是一种很好的方式,可以查看SSMS生成的SQL语句,背后的运行机制。在表格设计师中右键点击,并从上下文菜单中选择“生成更改脚本”。在弹出的新对话框中,你可以查看/保存/复制SQL语句。此时,你仍然可以撤销操作,如果不想提交更改的话。 - David Rushton
@EuphoriaGrogi 这个问题在那篇帖子中已经有了答案。 - Shakeer Mirza
1
@ShakeerMirza 是的 :) - DarkMakukudo
@racumin,你想要更新那里的值吗? - Tanner
不,值应该是相同的。@destination-data 的建议正是我想要的。我能够通过SSMS获得生成的脚本。 - racumin
显示剩余2条评论
1个回答

0

修订答案

您可以使用DBCC CHECKIDENT重新设置表的种子值:

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

原始答案

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

正如您所怀疑的那样,该过程是:

  1. 创建新表。
  2. 可选地,迁移现有数据。
  3. 删除旧表。
  4. 重命名新表。

需要一个新表,因为现有的标识无法更新,SQL Server仅允许每个表一个标识列

示例

-- 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每个表只支持一个标识列。

我刚刚使用SSMS完成了它,而且没有删除。 - DarkMakukudo
1
幕后,SSMS会创建一个新表,将旧表中的所有数据移动到新表中,删除旧表,然后重命名新表。您可以通过查看更改脚本或运行SQL Profiler来查看此过程。 - David Rushton

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