4

두 개의 테이블 인 DefectData와 DefectData가 있습니다. 각 결함에는 하나 이상의 결함 데이터가 있거나 없을 수 있습니다. 따라서 DefectData는 DefectId 열을 외래 키로 사용합니다.자동 증가 ID가있는 테이블에 삽입 할 때 외래 키 관계 유지

두 테이블의 Id는 자동 증가 ID입니다.

내가 겪고있는 문제는 새로운 결함과 DefectData를 삽입하려고 할 때 결함이 먼저 삽입되어 ID를 얻지 만 Id가 DefectData에 제공 할 내용을 알지 못한다는 것입니다. 내 솔루션은 다음 ID를 얻으려면 삽입 된 데이터와 일치하는 결함을 선택하는 것입니다.

  1. 삽입 결함
  2. 다음이 작동하지 않습니다 내 자신의 ID와 삽입에 IdentityInsert 설정 2.

에서 아이디와 그 결함의 ID

  • 삽입 DefectData (제로 또는 많은)를 가져옵니다 웹 서버에 의해 실행되며 동시 호출이있을 수 있습니다 (바로 여기 있습니까?). 사전에

    Diagram

    감사합니다.

  • 답변

    5

    기본 패턴은이 사용 SCOPE_IDENTITY() 결함에서 새 행 ID를 얻기 위해

    종종
    BEGIN TRAN 
    
    INSERT Defect() 
    VALUES (...) 
    
    INSERT DefectData (DefectID, AdditionalNotes, ...) 
    VALUES (SCOPE_IDENTITY(), @AdditionalNotes, ...) 
    
    COMMIT TRAN 
    
    +1

    로컬 변수,'SET @NewId = SCOPE_IDENTITY의 새로운 ID 값을 저장할 수 있습니다 ()', 향후 작업이나 처리를 위해 또는 나중에 참조 할 수 있도록 응용 프로그램에 반환 할 수 있습니다. –

    +0

    감사합니다. 나는 이것을 지금 시도 할 것이다. 이 구조체가 연결되어 있다면 BEGIN TRAN을 중첩시킬 수 있습니까? – TheGwa

    +0

    @ TheGwa : 어 .. 무슨 뜻인지 확실치 않습니다. 그것은 새로운 질문이거나 이것을 볼 것입니다. http://stackoverflow.com/questions/2073737/nested-stored-procedures-containing-try-catch-rollback-pattern/2074139#2074139 – gbn