공개 : 나는 자연스러운 옹호자이며 IDENTITY PK 접근법에 반대합니다. 그러나 나는 삶의 선택에 대한 '살고 살아 간다'접근법을 가지고 있습니다. 따라서 종교적 논쟁은 여기에 없습니다.여러 개의 IDENTITY PK가있는 엔티티를 제작 하시겠습니까?
나는 유일한 키가 IDENTITY PK 컬럼 인 테이블을 상속 받았습니다. ID라고 부르 자. ID를 참조하는 테이블이 여러 개 있습니다. 새 엔터티를 만들려는 의도 된 프로세스는 다음과 같습니다.
- INSERT INTO
- scope_identity를 사용하여 자동 생성 ID를 가져옵니다.
- 을 관련 테이블에 삽입하려면 자동 생성 ID를 사용하십시오.
실제로 엔티티를 만들고 ID를 반환하는 도우미 저장 프로 시저가 있습니다. 그러나 두 가지 문제가 있습니다 :
도우미가 proc에 저장 한 것보다 더 많은 정보를 필요로하고 관련 테이블에 IDENTITY PK가있는 행을 만들어야하므로 각 엔티티에 대해 여러 자동 생성 값을 가져와야합니다. 방법. 수백 개의 엔티티를 조작해야하며 헬퍼 procs는 한 번에 하나의 엔티티를 처리하도록 코딩되어 있습니다.
'IDENTITY PK'디자인을 사용하여 엔티티를 대량 생산하는 가장 좋은 방법은 무엇입니까?
내 자연스러운 키 디자인을 사용할 때 키 값을 미리 생성 할 수 있으므로 외래 키가 예상하는 순서대로 테이블에 일부 스크래치 테이블을로드하는 경우 일뿐입니다. 따라서 IDENTIY 열의 유형과 일치하는 높은 값의 INTEGER 값 시퀀스를 찾고 싶습니다. 지금은 사용되지 않고 시간이 올 때 사용되지 않을 것이라는 희망이 있습니다. INSERT. 이것은 좋은 생각입니까?
답장을 보내 주셔서 감사합니다. 예, SQL Server. 내가 SCOPE_IDENTITY()를 사용할 수없는 이유는 한 번에 하나씩이 아니라 build (100 개의 행을 포함)를 삽입하려고하기 때문입니다. 그래서 select-max then insert는 작동하지만 어떻게 내 100 개의 레코드와 다른 누구를 위해 생성 된 값을 찾을 수 있습니까? –
100 개의 행이 많지는 않습니다. 스크립트 루프를 통해 하나씩 쉽게 반복 할 수 있으며 여전히 상당한 시간이 걸리지 않습니다. 또는 select-max를 사용하여 첫 번째 빈 행을 가져온 다음 ID 값을 가진 행을 다음 연속 블록에 삽입합니다.이 경우 IDENTITY_INSERT를 사용하여 첫 번째 테이블의 100 개 행을 INSERT하면 *, * IDENTITY_INSERT로 다음 텍스트에 100 개의 해당 행을 삽입하십시오. 한 번에 하나의 테이블에서만 설정할 수 있기 때문에. – bobince