[sql] SQL Server 2008을 사용하여 IDENTITY_INSERT를 설정 및 해제하는 방법은 무엇입니까?

IDENTITY_INSERTOFF로 설정 하면 삽입 작업 중에 오류가 발생하는 이유는 무엇 입니까?

SQL Server 2008에서 올바르게 설정하려면 어떻게합니까? SQL Server Management Studio를 사용합니까?

이 쿼리를 실행했습니다.

SET IDENTITY_INSERT Database. dbo. Baskets ON

그런 다음 콘솔에 명령이 성공적으로 완료되었다는 메시지가 나타납니다. 그러나 응용 프로그램을 실행할 때 여전히 아래에 표시된 오류가 발생합니다.

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.



답변

MSDN에 따라 SQL을 통해

SET IDENTITY_INSERT sometableWithIdentity ON

INSERT INTO sometableWithIdentity 
    (IdentityColumn, col2, col3, ...)
VALUES 
    (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF

완전한 오류 메시지는 정확히 무엇이 잘못되었는지 알려줍니다 …

IDENTITY_INSERT가 OFF로 설정되어 있으면 ‘sometableWithIdentity’테이블에서 ID 열에 명시 적 값을 삽입 할 수 없습니다.


답변

IDENTITY_INSERT를 ON으로 설정 한 후에도 삽입 할 수없는 문제가있었습니다.

문제는 열 이름을 지정하지 않았고 어떤 이유로 든 좋아하지 않았다는 것입니다.

INSERT INTO tbl Values(vals)

따라서 기본적으로 전체 삽입을 수행하십시오. tbl (cols) Values ​​(vals)


답변

가져 오기 :INSERT 명령문에
열을 작성 해야합니다 .

INSERT INTO TABLE
SELECT * FROM    

정확하지 않습니다.

Insert into Table(Field1,...)
Select (Field1,...) from TABLE

맞다


답변

나는 이것이 오래된 실이라는 것을 알고 있지만 나는 이것에 부딪쳤다. 사용자가 다른 세션 Set IDENTITY_INSERT ON 후에 Identity 열에서 삽입을 실행하려고하면 위의 오류가 발생합니다.

Identity Insert 값 설정 및 후속 Insert DML 명령은 동일한 세션에서 실행됩니다.

여기서 @Beginner는 Identity Insert를 별도로 설정 한 다음 응용 프로그램에서 삽입을 실행했습니다. 그래서 그는 아래 오류가 발생합니다 :

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.


답변

이것은 PRIMARY KEY 필드가 있고 중복되는 값을 삽입하거나 INSERT_IDENTITY 플래그가 on으로 설정된 경우에 가능합니다.


답변

그것은을 넣어 필요 보이는 SET IDENTITY_INSERT Database.dbo.Baskets ON;모든 SQL 전에 INSERT전송 배치.

INSERT ... VALUES ...처음에 하나의 SET IDENTITY_INSERT ... ON;문자열로 시작하는 여러 명령을 보낼 수 있습니다 . 배치 구분 기호를 사이에 두지 마십시오.

SET IDENTITY_INSERT ... ON전송 블록 (예 : .ExecuteNonQuery()C #에서) 이후에 중지가 작동하는 이유를 모르겠습니다 . SET IDENTITY_INSERT ... ON;다음 SQL 명령 문자열의 시작 부분에 다시 넣어야 했습니다.


답변

ID 삽입을 설정 한 후 ‘go’명령을 추가해야합니다. 예:

SET IDENTITY_INSERT sometableWithIdentity ON
go

INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF
go