gpt4 book ai didi

t-sql - SQL Server 将列转换为标识列

转载 作者:行者123 更新时间:2023-12-03 07:03:43 25 4
gpt4 key购买 nike

我使用的是 SQL Server 2008。我使用一个 int 列作为主键,但没有使用标识列(其值会自动增加 1)。我想将此列转换为标识列。有什么解决办法吗?

提前致谢,乔治

最佳答案

遗憾的是,您无法将现有表上的字段更改为 IDENTITY

你应该:

  • 使用 IDENTITY 字段创建一个新表
  • 为新表发出SET IDENTITY_INSERT ON
  • 将数据插入新表
  • 为新表发出SET IDENTITY_INSERT OFF
  • 删除旧表
  • 将新表重命名为旧名称。

您可以使用SSMS更改字段类型,它会在幕后为您完成这一切。

这是一个示例表:

CREATE TABLE plain (id INT NOT NULL PRIMARY KEY)

INSERT
INTO plain
VALUES (1000)

以及SSMS生成的脚本:

SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_plain
(
id int NOT NULL IDENTITY (1, 1)
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_plain SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_plain ON
GO
IF EXISTS(SELECT * FROM dbo.plain)
EXEC('INSERT INTO dbo.Tmp_plain (id)
SELECT id FROM dbo.plain WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_plain OFF
GO
DROP TABLE dbo.plain
GO
EXECUTE sp_rename N'dbo.Tmp_plain', N'plain', 'OBJECT'
GO
ALTER TABLE dbo.plain ADD CONSTRAINT
PK__plain__3213E83F1A609306 PRIMARY KEY CLUSTERED
(
id
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
COMMIT

关于t-sql - SQL Server 将列转换为标识列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3616813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com