Rất tiếc, bạn không thể thay đổi trường thành IDENTITY
trên một bảng hiện có.
Bạn nên:
- Tạo một bảng mới với
IDENTITY
lĩnh vực - Sự cố
SET IDENTITY_INSERT ON
cho bảng mới - Chèn dữ liệu vào bảng mới
- Sự cố
SET IDENTITY_INSERT OFF
cho bảng mới - Bỏ bảng cũ
- Đổi tên bảng mới thành tên cũ.
Bạn có thể sử dụng SSMS
để thay đổi loại trường, nó sẽ thực hiện tất cả những điều này cho bạn.
Đây là bảng mẫu:
CREATE TABLE plain (id INT NOT NULL PRIMARY KEY)
INSERT
INTO plain
VALUES (1000)
và tập lệnh được tạo bởi 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