2014-03-05 6 views
0

질문 : 같은 INSERT 모두 암시 & 명시 적 정체성을 지정하는 방법은경우 MSSQL - 암시 적 및 명시 신원 INSERT

있습니까?

INSERT INTO target (id, name) 
VALUES 
    (1, 'machin') 
, (2, 'chouette') 
, (3, 'trutruc') 
, (NULL, 'chouchouette') 
, (NULL, 'chose') 
; 

아니면 2 개의 다른 검색어를 사용해야합니까?

my fiddle


상황을 체크 아웃하십시오 : 나는 그가// 업데이트를 만들 값을 삭제할 수있는 사용자에게이 목록에 대한 인라인 편집기를 제시하고있다. 그가 그것을 제출할 때 저는 값을 대체 할 것입니다. 이 값은 다른 객체와 관련되어 있으므로 가능한 한 많은 객체 ID를 유지하려고합니다.

+1

'IDENTITY' 열에 할당 된 실제 값에 대해 신경 쓰면 아마 잘못 사용했을 것입니다. 그들은 단지 고유 한 행을 처리하는 불투명 한 얼룩이어야합니다. –

+0

관련 개체에 대한 ID를 유지하려고 할 때 컨텍스트가이 전체 목록을 편집하고 있습니다. –

답변

2

아니요, 별도의 쿼리를 사용해야합니다. IDENTITY 열에 삽입하려면 IDENTITY_INSERTON을 입력해야합니다.이 시점에서 서버가 "나를 신뢰하면 적절한 값을 제공 할 것"이라고 말합니다.

나는 IDENT_CURRENT을 사용하고 NULL 사람의 ID 값을 계산 쿼리를 작성했는데, 거기 IDENT_CURRENT 호출 횟수에 대한 보장은 없습니다 그것은 동일한 결과를 생성하기 어렵다, 그래서 값 그것이 무엇 반환 무슨 서버는 정상적인 상황에서 생산되었을 것입니다.

+0

원래 질문에 답해 주셔서 감사합니다 (아니요 :). 그래서 당신은 내가 ID를 가지고 있고 다른 것들을 INSERT하는 값을'UPDATE'해야한다고 제안하고 있습니다. 사실 논리적 인 것처럼 보입니다. –

+1

@PierredeLESPINAY - 그렇습니다. ['MERGE'] (http://msdn.microsoft.com/en-us/library/bb510625.aspx)를 고려해보십시오. –

+0

호 나는 이걸 모르고 매우 흥미로 보입니다. –

0

제출할 때 값을 대체합니다.

심각한 프로그래밍 실수라고합니다.

신원은 ID이므로 업데이트하는 대신 삭제/삽입하면 참조 무결성을 절대로 사용할 수 없습니다. RI는 좋은 데이터를 얻는 핵심 기반입니다.이 접근법은 심각하게 cunterproductive합니다.

여기에서 주된 문제는 "특정 값으로 삽입하는 것이 아니라"대신 "업데이트 대신 삽입하기"입니다.