안녕하세요. 한 가지 간단한 질문이 있습니다.SQL Server ID 열 삽입이 실패합니다.
ID 열에서 삽입 문이 실패하면 어떻게됩니까?
예를 들어, ID 열이있는 행을 삽입하면 그 ID 열은 1이되고 다시 삽입되지만 실패하고 삽입 및 데이터가 삽입되지 않을 수도 있습니다. 그런 다음 다시 삽입하면 해당 행의 ID가 3이됩니다.
모든 조언을 주시면 감사하겠습니다.
감사합니다.
안녕하세요. 한 가지 간단한 질문이 있습니다.SQL Server ID 열 삽입이 실패합니다.
ID 열에서 삽입 문이 실패하면 어떻게됩니까?
예를 들어, ID 열이있는 행을 삽입하면 그 ID 열은 1이되고 다시 삽입되지만 실패하고 삽입 및 데이터가 삽입되지 않을 수도 있습니다. 그런 다음 다시 삽입하면 해당 행의 ID가 3이됩니다.
모든 조언을 주시면 감사하겠습니다.
감사합니다.
데이터 삽입 오류의 원인에 따라 다릅니다. 예를 들어 값이 유효하지 않은 경우 (잘못된 유형), ID 값이 증가하지 않습니다. 그러나 첫 번째 삽입이 성공적이지만 트랜잭션이 실패하고 롤백되어 제거되면 ID 값이 증가합니다.
-- Next identity value = 1
INSERT INTO Table1 (
field1)
VALUES ('a')
-- Next identity value = 2
BEGIN TRAN
INSERT INTO Table1 (
field1)
VALUES ('b')
-- Next identity value = 3
ROLLBACK TRAN
-- Next identity value = 3, although the insertion was removed.
INSERT INTO Table1 (
field1)
VALUES ('c')
-- Next identity value = 4
첫 번째 삽입 ID 열 값 = 1, 두 번째는 실패가되고, 세번째는 ID 열 값 = 3
열이 IDENTITY
사양을 가지고 있다고해서 반드시 고유 한 것은 아닙니다.
에 해당 열의 고유 제한 조건 (또는 기본 키 제약 조건)이없는 경우 해당 열의 행에 여러 개의 동일한 값을 삽입 할 수 있습니다.
일반적으로,하지만, 당신의 IDENTITY
열 될 것 기본 키 (또는 적어도 그들에 UNIQUE
제약 조건이) 그 경우, 고유의 이미 오류가 발생합니다 존재하는 값을 ("삽입을 시도 위해 제약 조건 위반 "또는 그런 일이)
당신이 필요 IDENTITY
컬럼에 특정 값을 삽입 할 수 있도록 SET IDENTITY_INSERT (table name) ON
- 그렇지 않으면, SQL 서버에도 IDENTITY
컬럼에 대한 값을 지정하지 못할 것입니다.
그림의 경우 -이 시도 :
-- create demo table, fill with values
CREATE TABLE IdentityTest (ID INT IDENTITY, SomeValue CHAR(1))
INSERT INTO IdentityTest(SomeValue) VALUES('A'), ('B'), ('C')
SELECT * FROM IdentityTest -- Output (1)
-- insert duplicate explicit values into table
SET IDENTITY_INSERT IdentityTest ON
INSERT INTO IdentityTest(ID, SomeValue) VALUES(1, 'Z'), (2, 'Y')
SET IDENTITY_INSERT IdentityTest OFF
SELECT * FROM IdentityTest -- Output (2)
-- add unique constraint
TRUNCATE TABLE dbo.IdentityTest
ALTER TABLE IdentityTest ADD CONSTRAINT UX_ID UNIQUE(ID)
INSERT INTO IdentityTest(SomeValue) VALUES('A'), ('B'), ('C')
SET IDENTITY_INSERT IdentityTest ON
INSERT INTO IdentityTest(ID, SomeValue) VALUES(1, 'Z') -- error message (3)
DROP TABLE IdentityTest
출력 (1) :
ID SomeValue
1 A
2 B
3 C
출력 (2) :
ID SomeValue
1 A
2 B
3 C
1 Z
2 Y
오류 메시지 (3) :
을메시지 2627, 수준 14, 상태 1, 줄 9
UNIQUE KEY 제약 조건 'UX_ID'위반. 'dbo.IdentityTest'개체에 중복 키를 삽입 할 수 없습니다. 중복 키 값은 (1)입니다.
하나의 방법을 사용할 경우에 로우 이미 삽입을 방지하기위한 것이다 존재합니다.
IF (Not Exists (Select ID From Table Where SomeCol = @SomeVal) Insert Into Table Values (@SomeVal)