455

次のスクリプトを実行すると、次のエラーが発生します。エラーの内容と解決方法を教えてください。

Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)

エラー:

サーバー: メッセージ 544、レベル 16、状態 1、行 1

IDENTITY_INSERT が OFF に設定されている場合、テーブル 'table' の ID 列に明示的な値を挿入できません。

4

29 に答える 29

77

SQLサーバーでこのエラーが発生した場合は、次のクエリを実行してください-

SET IDENTITY_INSERT tableName ON

これは、データベースの単一のテーブルに対してのみ機能します。 たとえば、テーブル名が次の場合、studentクエリは次のようになります。

SET IDENTITY_INSERT student ON

Web アプリケーションでこのエラーが発生した場合、またはエンティティ フレームワークを使用している場合は、まず SQL サーバーでこのクエリを実行し、エンティティ モデルを更新して ( .edmx file) 、プロジェクト をビルドすると、このエラーが解決されます。

于 2017-02-21T10:26:44.940 に答える
45

IDENTITY_INSERT を ON に設定することには十分注意してください。データベースがメンテナンス モードでシングル ユーザーに設定されていない限り、これはお勧めできません。これは、挿入だけでなく、テーブルにアクセスしようとしている他のユーザーの挿入にも影響します。

ID フィールドに値を入れようとしているのはなぜですか?

于 2009-08-26T15:02:46.907 に答える
27

そのテーブルのエンティティで、DatabaseGeneratedID 挿入が設定されている列の上に属性を追加します。

例:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TaskId { get; set; }
于 2016-03-17T19:45:47.663 に答える
26

エラーなしでレコードを挿入するには、基本的に 2 つの方法があります。

1) IDENTITY_INSERT が OFF に設定されている場合。主キー「ID」は存在してはなりません

2) IDENTITY_INSERT が ON に設定されている場合。主キー「ID」が存在する必要があります

IDENTITY PRIMARY KEY で作成された同じテーブルからの次の例に従って:

CREATE TABLE [dbo].[Persons] (    
    ID INT IDENTITY(1,1) PRIMARY KEY,
    LastName VARCHAR(40) NOT NULL,
    FirstName VARCHAR(40)
);

1) 最初の例では、IDENTITY_INSERT が OFF の場合、エラーを発生させずに新しいレコードをテーブルに挿入できます。PRIMARY KEY "ID"は "INSERT INTO" ステートメントから存在してはなりません。一意の ID 値が自動的に追加されます: . この場合、ID が INSERT から存在する場合、「表の識別列に明示的な値を挿入できません...」というエラーが表示されます。

SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE'); 
INSERT INTO Persons (FirstName,LastName) 
VALUES ('JOE','BROWN');

TABLE [dbo].[Persons] の出力は次のようになります。

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE

2) 2 番目の例では、IDENTITY_INSERT が ON の場合、エラーを発生させることなくテーブルに新しいレコードを挿入できます。ID 値がまだ存在しない限り、主キー「ID」は「INSERT INTO」ステートメントから存在する必要があります。この場合、ID が INSERT から存在しない場合、「明示的な値が必要です。 ID 列テーブルに指定されています..."

SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE'); 
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK'); 

TABLE [dbo].[Persons] の出力は次のようになります。

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE
3     BLACK      JACK
5     WHITE      JOHN
于 2018-03-13T23:07:50.993 に答える
7

liquibase を使用して SQL Server を更新している場合、レコード キーを autoIncrement フィールドに挿入しようとしている可能性があります。挿入から列を削除すると、スクリプトが実行されます。

<changeSet id="CREATE_GROUP_TABLE" >
    <createTable tableName="GROUP_D">
        <column name="GROUP_ID" type="INTEGER" autoIncrement="true">
            <constraints primaryKey="true"/>
        </column>
    </createTable>
</changeSet>

<changeSet id="INSERT_UNKNOWN_GROUP" >
    <insert tableName="GROUP_D">    

        <column name="GROUP_ID" valueNumeric="-1"/>
 ...
    </insert>
</changeSet>
于 2013-03-07T19:55:55.773 に答える
6

誰もが SQL についてコメントしていますが、EntityFramework では何が起こったのでしょうか? 私は投稿全体を読んで過ごしましたが、誰もEFを解決しませんでした。したがって、数日後に解決策が見つかりました: コンテキスト内の EF Core モデルを作成するには、次のような指示があります。 modelBuilder.Entity<Cliente>(entity => { entity.Property(e => e.Id).ValueGeneratedNever();

これもエラーを生成します。解決策: ValueGeneratedOnAdd() とその動作によって変更する必要があります!

于 2020-07-07T15:23:33.030 に答える
5

クエリには事前に言及された OperationId がありますが、これは自動的にインクリメントされるため、そこにあるべきではありません

Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)

あなたのクエリは

Insert table(OpDescription,FilterID)
values ('Hierachy Update',1)
于 2016-03-03T11:01:07.140 に答える
4

もう 1 つの状況は、主キーがクラスと同じ名前であることを確認することです。唯一の違いは、主キーに「ID」が追加されているか、主キーに [Key] を指定することです。クラスに名前が付けられます。

于 2015-02-24T23:07:40.693 に答える
1
  1. 最初に必要なテーブル名に移動します

ステップ 2 -> テーブル名を右クリック

ステップ 3 --> デザインを選択

ステップ 4 --> 列名をクリックします

ステップ 5) 列のプロパティに移動し、ID 仕様にNoを設定します。

[注:必要に応じて明示的な値に挿入した後、ID仕様をtrueに戻すことができ、再び値が生成されます]

SQLサーバー管理スタジオを使用している場合は、以下の方法を使用できます

ステップ 1) ここに画像の説明を入力 ステップ 2)ここに画像の説明を入力

于 2022-01-10T05:12:13.383 に答える
0

すべてが正しい場合でも、Identity 列のデータ型が int または long でない場合、このエラーが表示されることがあります。私はint値しか保存していませんでしたが(私の悪い)、ID列を10進数として持っていました。データベースと基になるモデルの両方でデータ型を変更すると、問題が修正されました。

于 2022-01-26T07:55:24.540 に答える
0

「テーブルの挿入」の用途はわかりませんが、いくつかの値を挿入しようとしているだけの場合は、次を試してください。

Insert Into [tablename] (OpDescription,FilterID)
values ('Hierachy Update',1);

同じエラー メッセージが表示されましたが、これで問題ないと思います。ID は、主キーである限り、自動的にインクリメントされます。

于 2016-09-22T21:33:05.710 に答える
0

また、Oracle SQL Developer を使用して接続している場合は、忘れずに / sqldev:stmt /を追加してください。

/ sqldev:stmt / ID_INSERT TABLE をオンに設定します。

于 2013-07-16T15:53:35.387 に答える
-1

.dbml ファイルにドラッグされたテーブルを削除して、再度ドラッグするだけです。次に、ソリューションのクリーン>ソリューションの再構築>ソリューションの構築。

それが私のために働いたものです。

私は自分でテーブルを作成しませんでした。VS と SSMS を使用していました。ASP.NET Identity の次のリンクをたどりました: https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/空または既存の Web フォーム プロジェクトに aspnet-identity を追加する

于 2019-04-20T20:41:58.093 に答える
-1

インターフェイスを使用し、savechanges のメソッドを一般的な方法で実装する場合に、型指定されていない DBContext または DBSet を使用すると発生する問題

これがあなたの場合であれば、たとえば強く型付けされた DBContex を提案します

MyDBContext.MyEntity.Add(mynewObject)

それから.Savechanges動作します

于 2017-03-23T12:49:27.833 に答える