【问题标题】:SQL Server : how to alter already existing auto_increment for a column [duplicate]SQL Server:如何更改列的现有 auto_increment [重复]
【发布时间】:2016-06-22 05:12:33
【问题描述】:

我有这张桌子

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

谢谢!

【问题讨论】:

  • 您的表是否已有数据?如果是这样,你想更新它吗?如果没有,您可以在设计器中对其进行修改并生成更改脚本。
  • 您是否知道 SSMS 中的大多数设计器操作都可以保存为 SQL script?这是在幕后查看 SSMS 生成的 SQL 的好方法。右键单击表设计器并从上下文菜单中选择 Generate Change Script。从弹出的新对话框中,您可以查看/保存/复制 SQL 语句。此时您仍然可以退出,因此如果您不希望更改将不会被提交。
  • @EuphoriaGrogi 这个问题在那篇文章中已经有了答案。
  • @ShakeerMirza 是的 :)
  • @Tanner 是的,我的表已经有数据了

标签: sql-server database ssms auto-increment


【解决方案1】:

修改后的答案

您可以使用DBCC CHECKIDENT 为表格重新设定种子:

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

原答案

抱歉,您无法更改现有 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. 正如下面的 cmets 中所指出的,SSMS 可以为您自动执行此过程。
  2. 添加了示例代码和更多详细信息。
  3. 删除可以添加新标识列的语句,SQL Server 仅支持每个表一个。

【讨论】:

  • 我刚刚使用SSMS完成了,没有丢弃
  • 幕后 SSMS 创建一个新表,将所有数据从旧表移动到新表中,删除旧表,然后重命名新表。您可以通过查看更改脚本或运行 SQL Profiler 来查看这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2011-09-01
  • 1970-01-01
  • 2011-02-11
  • 2013-11-17
  • 2011-01-18
  • 2015-04-24
相关资源
最近更新 更多