2011-10-15 1 views
2

C#의 SQL Server 2K8에서 최적화 할 레코드를 부모/자식 테이블에 일괄 적으로 삽입/업데이트하려고합니다.Batch insert return ID 및 개체 참조/시퀀스

삽입/업데이트는 OUTPUT 등을 통해 추출한 다음 자동으로 도메인 모델에서 다시 할당하려는 키를 자동으로 생성합니다. 일괄 삽입의 경우 새로 생성 된 ID가 일괄 처리 목록의 어떤 도메인 개체에 속하는지 추적해야합니다.

이 예는 내가 필요에 근접하지만, 거기에 여분의 열을 가지고 있지하는 방법 테이블에 추가 (SequenceNumber) 그리고 여전히 같은 결과를 얻을 경우 궁금 해서요 : http://illdata.com/blog/2010/01/13/sql-server-batch-inserts-of-parentchild-data-with-ibatis/

즉. OUTPUT에서 temp 테이블로 생성 된 삽입 순서에 의존하거나 데이터 모델에 설정된 ref GUID를 전달하고 참조 용으로 일시적으로 SQL에 전달할 수 있습니까? 내가 오해 한 않는

+1

SQL Server 2008 사용자는 'merge ... output'을 사용하여 생성 된 키와 준비 테이블에서 사용되는 키 사이의 매핑을 가져올 수 있습니다. http://stackoverflow.com/questions/5365629/using-merge-output-to-get-mapping-between-source-id-and-target-id –

+0

완벽했기 때문에 정확하게 내가 미카엘을 필요로했다! 원한다면 그 질문을 답변으로 게시 할 수 있습니다. – soundslike

답변

0

...

대리 키 (IDENTITY 또는 NEWID 등)은 실제 객체 식별자가 아닙니다. 구현 세부 사항이며 본질적인 의미가 없습니다.

실제 (자연) 키인 다른 식별자 (이름, ISBN, 일련 번호, 트랜잭션 코드/날짜 등)가 있어야합니다.

OUTPUT 절은 대리 키와 자연 키를 반환 할 수 있습니다.

+0

나는 Person {int Id, string Name} 클래스에 IDENTITY 컬럼의 ID를 가지고있다. 하지만 삽입하려는 People 클래스의 배치 목록이 있습니다. 처음에는 Name 필드 만 채우고 배치 목록에있는 모든 People 클래스의 배치 삽입을 수행 한 다음 C# 클래스의 Id 속성을 설정합니다. 내 배치 목록에있는 적절한 C# People 클래스에 설정된 SQL Server에서이 ID를 다시 가져와야합니다. 임시 테이블에 OUTPUT을 사용하면 SQL Server에서 작성한 ID 목록을 가지고 있지만 실제로 할당해야하는 C# People 클래스를 실제로 알 수있는 방법이 없습니다. – soundslike

+0

OUTPUT 절을 사용하면 INSERTED.ID, INSERTED.Name을 얻을 수 있습니다. 그런 다음 이름을 지정하여 ID를 지정하십시오. OUTPUT 절의 한 열에 만 제한되지 않습니다. – gbn