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 列的增量。
如你所料;过程是:
- 新建table.
- 可以选择迁移现有数据。
- 放弃旧的 table.
- 重命名新 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';
编辑
- 正如下面的评论中所指出的,SSMS 可以为您自动执行此过程。
- 添加了示例代码和更多细节。
- 删除您可以添加新标识列的声明,SQL 服务器仅支持一个 table。
我有这个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 列的增量。
如你所料;过程是:
- 新建table.
- 可以选择迁移现有数据。
- 放弃旧的 table.
- 重命名新 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';
编辑
- 正如下面的评论中所指出的,SSMS 可以为您自动执行此过程。
- 添加了示例代码和更多细节。
- 删除您可以添加新标识列的声明,SQL 服务器仅支持一个 table。