다음 스크립트를 실행할 때 아래와 같은 오류가 발생합니다. 오류는 무엇이며 어떻게 해결할 수 있습니까?
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
이것은 하나의 databse 테이블 만 작동합니다.
예를 들어 테이블 이름이 학생 인 경우 쿼리는 다음과 같습니다 SET IDENTITY_INSERT student ON
웹 애플리케이션에서이 오류가 발생하거나 엔티티 프레임 워크를 사용하는 경우 먼저 SQL Server에서이 쿼리를 실행하고 엔티티 모델을
.edmx file
업데이트하고 ( ) 프로젝트를 빌드 하면이 오류가 해결됩니다.
IDENTITY_INSERT를 ON으로 설정하는 것에 매우주의하십시오. 데이터베이스가 유지 보수 모드에 있고 단일 사용자로 설정되어 있지 않으면 이는 좋지 않은 방법입니다. 이것은 인서트뿐만 아니라 테이블에 액세스하려는 다른 사람들에게도 영향을 미칩니다.
ID 필드에 값을 입력하려고하는 이유는 무엇입니까?
기본적으로 오류없이 레코드를 삽입하는 방법에는 두 가지가 있습니다.
1) IDENTITY_INSERT가 OFF로 설정된 경우. 기본 키 "ID"는 없어야합니다.
2) IDENTITY_INSERT가 ON으로 설정된 경우. 기본 키 "ID"가 있어야합니다.
IDENT 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');
표 [dbo]의 출력. [사람]은 다음과 같습니다.
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
2) 두 번째 예에서는 IDENTITY_INSERT가 ON 일 때 오류없이 테이블에 새 레코드를 삽입 할 수 있습니다. 기본 키ID 값이 존재하지 않는 "ID" 는 "INSERT INTO"문에 있어야 합니다 .이 경우 ID가 INSERT에 없으면 "명시적인 값은 다음과 같아야합니다. 식별 컬럼 테이블에 지정되었습니다 ... "
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');
표 [dbo]의 출력. [사람]은 다음과 같습니다.
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를 서로 구별하기 위해 새 행에 넣고 있습니다 insert
.
예를 들어 테이블 이름이 School 인 경우이 명령문을 간단히 사용할 수 있습니다 . 삽입하기 전에 identity_insert가 ON 으로 설정 되고 쿼리 삽입 후 identity_insert를 끄십시오.
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>
또 다른 상황은 기본 키가 클래스와 동일한 이름 인지 확인하는 것입니다. 단 한 가지 차이점은 기본 키에 'ID'가 추가되었거나 기본 키에 [키]를 지정하는 방법과 다릅니다. 클래스 이름이 지정됩니다.
[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 전략을 사용하여 데이터베이스에 의해 생성되며 관리 할 필요가 없습니다. 데이터베이스가이를 수행합니다.
sequelize-typescript npm과 함께 sql-server를 사용하는 동안이 문제가 발생 @AutoIncrement
하면 ID 열에 추가하십시오 .
@PrimaryKey
@AutoIncrement
@Column
id!: number;
당신이 각 라인을 폐쇄하는 경우주의 ;
는 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 파일로 끌어온 테이블을 삭제하고 다시 드래그하십시오. 그런 다음 Clean solution> Rebuild solution> Build solution을 청소하십시오.
그게 나를 위해 일한 것입니다.
나는 스스로 테이블을 만들지 않았고 VS와 SSMS를 사용하고 있었고 ASP.NET Identity의 https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/ 링크를 따랐습니다. 빈 상태 또는 기존 웹 양식 프로젝트에 ASP-ID를 추가