2012-04-04 8 views
46

私は、次のクエリを使用しています:SQLサーバーがこのエラーをスローする理由:NULL値を列 'id'に挿入できません。

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

は、しかし、私は(idある)主キーを指定していませんよ。だから私の質問は、なぜSQL Serverは、このエラーで戻って来て、次のとおりです。

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. 

答えて

81

私はidが増分値ことになっていると仮定しています。

これを設定する必要があります。また、null以外の列がある場合はデフォルト値がなく、値を指定しないとエラーになります。 SQL Server Management Studioで自動インクリメントを設定するには

  • Design
  • であなたのテーブルを開き、あなたの列を選択し、Indentity Specificationの下Column Properties
  • に行き、(Is Identity)=YesIndentity Increment=1
を設定しました
+0

が、私は..私は同じエラーを超える..私は、私はID手段に設定されたアイデンティティ一つだけcolumn..ifを設定することができます2列と呼ばれるIDとid_studentを持っています、id_studentのエラー、またはid_studentに設定した場合、idにエラーが発生します。 – pcs

+0

これらの変更を保存しようとすると、Management Studioに「変更を保存することはできません」というメッセージが表示されます。変更を加えた場合は、次の表を削除して再作成する必要があります。テーブルを再作成する必要がある変更を保存しないようにするオプションを作成または有効にしました。 – Henno

+2

私はこのオプションを有効にしませんでしたが、ONになっていました。チェックをはずして([ツール]> [オプション]> [デザイナー]の下にあります)、変更を保存できました。 – Henno

0

挿入にIDを指定するか、id列をthに設定する必要がありますeデータベースにIdentity Specification = Yesを設定します。

0

IDはPKであるため、一意で、nullでない必要があります。 フィールドリストに入力用のフィールドがないと、nullまたはデフォルト値とみなされます。 毎回マニュアルを設定したくない場合は、このフィールドの識別情報(autoincrement)を設定します。 id列にはデフォルト値はありませんが、NOT NULL制約がある場合

5

、その後、あなたが価値を提供する必要があり、自分

あなたがテーブルを作成するときにtrueにid列の自動インクリメントプロパティを設定する必要が
INSERT INTO dbo.role (id, name, created) VALUES ('something', 'Content Coordinator', GETDATE()), ('Content Viewer', GETDATE()) 
0

か既存のテーブルを変更してこれを行うことができます。

-3

あなたはID列(ここで私は、「PK」それを呼び出す)に手動で値を挿入することができます。

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

これがどのように機能するかについての説明を追加できますか? – Robert

0

@curtは正しいですが、私は時には、これはNULLがエラーを禁止して失敗したことに気付きました断続的に見える。 Indeed Seedを1に設定し、IDENTITY(1, 1) NOT FOR REPLICATIONに設定することで、常にエラーを回避しました。

0

あなたはidの値を指定していません。これを試してください:

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

または、自動的に追加されたID値が必要な場合は、自動増分IDフィールドを設定できます。

1

使用IDENTITY(1,1)表を作成している間に 例えば

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

CONSTRAINT [PK_SAMPLE] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
) 
) 
関連する問題