2012-04-04 42 views
46

Tôi đang sử dụng các truy vấn sau đây:Tại sao máy chủ SQL ném lỗi này: Không thể chèn giá trị NULL vào cột 'id'?

INSERT INTO role (name, created) VALUES ('Content Coordinator', GETDATE()), ('Content Viewer', GETDATE()) 

Tuy nhiên, tôi không xác định khóa chính (đó là id). Vì vậy, câu hỏi của tôi là, tại sao là sql máy chủ trở lại với lỗi này:

Msg 515, Level 16, State 2, Line 1 
Cannot insert the value NULL into column 'id', table 'CMT_DEV.dbo.role'; column does not allow nulls. INSERT fails. 
The statement has been terminated. 

Trả lời

81

Tôi giả định rằng id được coi là một giá trị incrementing.

Bạn cần đặt giá trị này, nếu không, nếu bạn có cột không thể vô hiệu, không có giá trị mặc định, nếu bạn không cung cấp giá trị, nó sẽ bị lỗi.

Để thiết lập tính năng tự động tăng trong SQL Server Management Studio:

  • Mở bảng của bạn trong Design
  • Chọn cột của bạn và đi đến Column Properties
  • Dưới Indentity Specification, thiết (Is Identity)=YesIndentity Increment=1
+0

nhưng tôi có 2 cột gọi là id và id_student .. Tôi cùng trên lỗi .. tôi có thể thiết lập bản sắc chỉ có một column..if tôi đặt cho phương tiện id , lỗi cho id_student hoặc nếu tôi đặt cho id_student nghĩa là có lỗi cho id. – pcs

+0

Khi cố gắng lưu các sửa đổi này, Management Studio cho biết "Không được phép thay đổi các thay đổi. Các thay đổi bạn đã thực hiện yêu cầu các bảng sau sẽ bị xóa và tạo lại. Bạn đã thực hiện các thay đổi đối với bảng không thể quay lại được đã tạo hoặc bật tùy chọn Ngăn chặn lưu thay đổi yêu cầu phải tạo lại bảng. " – Henno

+2

Mặc dù tôi không bật tùy chọn này, nhưng nó đã bị BẬT. Tôi đã bỏ chọn nó (trong Tools> Options> Designers) và có thể lưu các thay đổi. – Henno

0

Bạn cần chỉ định ID trong trình chèn hoặc bạn cần định cấu hình cột id trong th Cơ sở dữ liệu điện tử có đặc điểm nhận dạng = Có.

0

Vì id là PK, nó phải là duy nhất và không phải là rỗng. Nếu bạn không đề cập đến bất kỳ trường nào trong danh sách trường để chèn nó sẽ được coi là giá trị rỗng hoặc mặc định. Đặt danh tính (tức là tự động tăng) cho trường này nếu bạn không muốn đặt thủ công mỗi lần.

5

Nếu cột id không có giá trị mặc định, nhưng có NOT NULL hạn chế, sau đó bạn phải cung cấp một giá trị bản thân

INSERT INTO dbo.role (id, name, created) VALUES ('something', 'Content Coordinator', GETDATE()), ('Content Viewer', GETDATE()) 
0

Bạn cần phải thiết lập thuộc tính autoincrement của cột id để đúng khi bạn tạo bảng hoặc bạn có thể thay đổi bảng hiện tại của bạn để làm điều này.

-3

Bạn có thể chèn một giá trị bằng tay trong cột ID (ở đây tôi gọi nó là "PK"):

insert into table1 (PK, var1, var2) 
values ((select max(PK)+1 from table1), 123, 456) 
+0

Bạn cũng có thể thêm giải thích về cách tính năng này hoạt động không? – Robert

0

@curt là đúng, nhưng tôi đã nhận thấy rằng đôi khi ngay cả điều này không thành công với NULL không được phép sai sót và dường như nó không liên tục. Tôi đã tránh lỗi này mọi lúc, bằng cách đặt Indenty Seed thành 1 và IDENTITY(1, 1) NOT FOR REPLICATION.

0

bạn không đưa ra giá trị cho id. Hãy thử điều này:

INSERT INTO role (id, name, created) VALUES ('example1','Content Coordinator', GETDATE()), ('example2', 'Content Viewer', GETDATE()) 

Hoặc bạn có thể đặt tăng tự động trên trường id, nếu bạn cần giá trị id được thêm tự động.

1

sử dụng IDENTITY(1,1) khi tạo bảng ví dụ

CREATE TABLE SAMPLE(
[Id]  [int] IDENTITY(1,1) NOT NULL, 
[Status] [smallint] NOT NULL, 

CONSTRAINT [PK_SAMPLE] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
) 
) 
Các vấn đề liên quan