85

次のクエリを使用しています。

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

ただし、主キー ( ) は指定していませんid。だから私の質問は、なぜSQLサーバーがこのエラーで戻ってくるのですか?

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.
4

13 に答える 13

153

それidは増分値であると想定しています。

これを設定する必要があります。または、null 非許容の列があり、デフォルト値がない場合は、値を指定しないとエラーになります。

SQL Server Management Studio で自動インクリメントを設定するには:

  • でテーブルを開きますDesign
  • 列を選択して移動しますColumn Properties
  • の下Indentity Specificationで、設定(Is Identity)=YesしてIndentity Increment=1
于 2012-04-04T14:36:40.817 に答える
4

If the id column has no default value, but has NOT NULL constraint, then you have to provide a value yourself

INSERT INTO dbo.role (id, name, created) VALUES ('something', 'Content Coordinator', GETDATE()), ('Content Viewer', GETDATE())
于 2012-04-04T14:40:26.773 に答える
0

You need to set autoincrement property of id column to true when you create the table or you can alter your existing table to do this.

于 2012-04-04T14:44:32.463 に答える
0

挿入で ID を指定するか、データベースの id 列を構成して Identity Specification = Yes にする必要があります。

于 2012-04-04T14:38:15.507 に答える
0

id は PK であるため、null ではなく一意である必要があります。挿入するフィールド リストにフィールドを指定しない場合は、null またはデフォルト値と見なされます。毎回手動で設定したくない場合は、このフィールドに ID (つまり、自動インクリメント) を設定します。

于 2012-04-04T14:38:26.130 に答える
-1

@curt は正しいですが、これでも NULL 許可されないエラーで失敗することがあり、断続的であるように思われることに気付きました。Indenty Seed を 1 と に設定することで、常にエラーを回避しましたIDENTITY(1, 1) NOT FOR REPLICATION

于 2015-08-17T02:19:12.183 に答える
-4

ID 列に値を手動で挿入できます (ここでは「PK」と呼びます)。

insert into table1 (PK, var1, var2)
values ((select max(PK)+1 from table1), 123, 456)
于 2015-06-10T10:44:20.387 に答える