Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server chuyển đổi cột thành cột nhận dạng

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt cụm chuyển đổi dự phòng SQL Server -2

  2. SQLException:Dữ liệu chuỗi hoặc nhị phân sẽ bị cắt bớt

  3. Quên mật khẩu máy chủ SQL

  4. Làm thế nào để lấy mức lương cao thứ n từ một bảng mà không cần sử dụng TOP và truy vấn phụ?

  5. Entity Framework - One-to-One - ReferentialConstraint được ánh xạ tới một cột do cửa hàng tạo