次のスクリプトを実行すると、次のエラーが発生します。どのようなエラーがあり、どのように解決できますか?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
エラー:
サーバー:メッセージ544、レベル16、状態1、行1
IDENTITY_INSERTがOFFに設定されている場合、テーブル 'table'のID列に明示的な値を挿入できません。
次のスクリプトを実行すると、次のエラーが発生します。どのようなエラーがあり、どのように解決できますか?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
エラー:
サーバー:メッセージ544、レベル16、状態1、行1
IDENTITY_INSERTがOFFに設定されている場合、テーブル 'table'のID列に明示的な値を挿入できません。
回答:
OperationId
そのための値をID列に挿入しています。
このようにテーブルでID挿入をオンにすると、独自のID値を指定できます。
SET IDENTITY_INSERT Table1 ON
INSERT INTO Table1
/*Note the column list is REQUIRED here, not optional*/
(OperationID,
OpDescription,
FilterID)
VALUES (20,
'Hierachy Update',
1)
SET IDENTITY_INSERT Table1 OFF
SQLサーバーでこのエラーが発生した場合は、次のクエリを実行してください。
SET IDENTITY_INSERT tableName ON
これはデータベースの単一のテーブルのみで機能します。
たとえば、テーブル名がStudentの場合、クエリは次のようになります。 SET IDENTITY_INSERT student ON
Webアプリケーションでこのエラーが発生した場合、またはエンティティフレームワークを使用している場合は、最初にSQLサーバーでこのクエリを実行してエンティティモデル
.edmx file
を更新し() 、プロジェクトをビルドすると、このエラーが解決されます
IDENTITY_INSERTをONに設定する場合は十分に注意してください。データベースがメンテナンスモードでシングルユーザーに設定されていない限り、これは不適切な方法です。これは、挿入だけでなく、テーブルにアクセスしようとしている他の人にも影響します。
なぜIDフィールドに値を入れようとしているのですか?
エラーなしでレコードを挿入するには、基本的に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の場合、エラーを発生させることなく新しいレコードをテーブルに挿入できます。主キー「ID」は「INSERT INTO」ステートメントから提示されてはならず、一意のID値が自動的に追加されます。この場合、INSERTからのIDが存在すると、「テーブルの列を識別するための明示的な値を挿入できません...」というエラーが発生します。
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の場合、エラーを発生させることなく新しいレコードをテーブルに挿入できます。PRIMARY KEY "ID"は、ID値がまだ存在しない限り、 "INSERT INTO"ステートメントから存在する必要があります。この場合、IDがINSERTから存在しない場合、 "Explicit value must be 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
そのテーブルのエンティティで、DatabaseGenerated
ID挿入が設定されている列の上に属性を追加します。
例:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TaskId { get; set; }
DatabaseGeneratedOption.Identity
、それでもエラーが発生します。それは私自身のせいです。新しい行に疑似IDを入れて、Webページ上でそれらを区別しているので、insert
十分なものになる前にそれらを単にnullにすることを望みます。
たとえば、テーブル名がSchoolの場合、このステートメントを使用するだけで済みます。挿入する前に、identity_insertがONに設定されていることを確認し、 クエリの挿入後にidentity_insertを OFFにしてください
SET IDENTITY_INSERT School ON
/*
insert query
enter code here
*/
SET IDENTITY_INSERT School OFF
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>
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
、PrimaryKey列に次のコード行を追加して修正し、データ型がintに設定されていることを確認してください。列が主キーであり、SQLでIsIDentityがtrueに設定されている場合、このコード行は必要ありません。[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
最善の解決策は、アノテーションを使用することでGeneratedValue(strategy = ...)
、すなわち
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column ...
private int OperationID;
それは、この列はIDENTITY戦略を使用してデータベースによって生成され、あなたが面倒を見る必要がないことを示しています-データベースがそれを行います。
で各行を閉じる場合;
、SET IDENTITY_INSERT mytable ON
コマンドは次の行に対して保持されないことに注意してください。
つまり
、次のようなクエリ
SET IDENTITY_INSERT mytable ON;
INSERT INTO mytable (VoucherID, name) VALUES (1, 'Cole');
エラーを出します
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF.
ただし、次のようなクエリは機能します。
SET IDENTITY_INSERT mytable ON
INSERT INTO mytable (VoucherID, name) VALUES (1, 'Cole')
SET IDENTITY_INSERT mytable OFF;
SET IDENTITY_INSERT
コマンドはトランザクションに対してのみ保持されるよう;
で、トランザクションの終了を示します。
.dbmlファイルにドラッグされたテーブルを削除して、再度それらを再度ドラッグするだけです。次に、ソリューションのクリーンアップ>ソリューションの再構築>ソリューションのビルド。
それは私のために働いたものです。
私は自分でテーブルを作成せず、VSとSSMSを使用していました。ASP.NETIdentityの次のリンクをたどりました:https ://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/ aspnet-identity-to-an-empty-or-existing-web-forms-projectの追加