2010-06-18 4 views
1

에서 각 레코드에 대해 저장 프로 시저를 실행 나는 업데이트해야하는 두 개의 테이블을 가지고, 마스터 및 식별자 :테이블

마스터
--MasterID (PK)
--ModifiedDate
--ModifiedBy

식별자
--IdentifierID
--MasterID (FK 마스터) --Identifier

--IdentifierType
--ModifiedDate
--ModifiedBy

마스터 테이블의 유일한 이유는 존재 하나의 사람에게 서로 다른 식별자를 묶는 것입니다.

식별자에 삽입해야하는 새 식별자 정보 (MasterID (있는 경우), 식별자, 식별자 유형)가 포함 된 파일이 전송됩니다. MasterID가있는 레코드는 분명히 삽입하기 쉽습니다. 그러나 하나도없는 기록은 조금 더 어렵습니다.

식별자 테이블에 데이터를 삽입하기 전에 새 MasterID를 생성해야 FK로 사용할 수 있습니다.

나는이의 라인을 따라 proc 디렉토리에 저장 뭔가가 작동 할 수 있다고 생각했다 :

DECLARE @IDOutput INT 

INSERT INTO Master 
(
    ModifiedDate, 
    ModifiedBy 
) 
VALUES 
(
    GETDATE(), 
    'Robert' 
) 

SET @IDOutput = SCOPE_IDENTITY() 

INSERT INTO Identifiers 
(
    MasterID, 
    Identifier, 
    IdentifierType, 
    ModifiedDate, 
    ModifiedBy  
) 
VALUES 
(
    @IDOutput, 
    Identifier, --this comes from input file 
    IdentifierType, --this comes from input file 
    GETDATE(), 
    'Robert' 
) 

내 문제는 내 입력 파일의 각 레코드에 대해이 저장된 프로 시저 실행을하는 방법입니다. 커서, 저장 프로 시저 내의 저장 프로 시저 또는 임시 테이블을 사용하여이 문제를 처리 할 수 ​​있지만이 방법 중 하나를 사용하여 구현하는 가장 좋은 방법은 아닌지 읽었습니다. 사실, 나는 이것이 올바른 방향으로 가고 있는지 확신 할 수 없다.

이 문제에 대한 도움을 주시면 대단히 감사하겠습니다.

+0

어떤 버전의 SQL Server를 사용 하시겠습니까? – gbn

+0

SQL Server 2008. – Sesame

답변

1

당신이 테이블을 준비했다 가정하면, 당신은 OUTPUT 절

을 사용 그래서 대신 루핑 많은 키를 캡처 할 수 있습니다, 당신은 테이블 변수에 새 키를 저장, 준비 테이블에서 "마스터"행을 선택하고 삽입합니다. 그런 다음이를 사용하여 하위 테이블을 채 웁니다. 이 같은

뭔가 : 그래도 말을

INSERT INTO Master (ModifiedDate, ModifiedBy, foo) 
OUTPUT Inserted.MasterID, Inserted.ModifiedBy INTO @NewKeys 
SELECT DISTINCT GETDATE(), 'Robert' FROM StagingTable 


INSERT INTO Identifiers 
(
    MasterID, 
    Identifier, 
    IdentifierType, 
    ModifiedDate, ModifiedBy  
) 
SELECT 
    N.MasterID, 
    S.Identifier, --this comes from input file 
    S.IdentifierType, --this comes from input file 
    GETDATE(), N.ModifiedBy 
FROM 
    StagingTable S 
    JOIN 
    @NewKeys N ON S.ModifiedBy = N.ModifiedBy 

는 : 스키마에이 mnore입니다. 마스터 테이블은 거의 아무런 도움이되지 않습니다 ...

+0

마스터 테이블과 식별자 테이블이 모두 눈에 띄며 불행히도 디자인에 대한 제어권이 없습니다. 약간의 배경 : 사람들이 다른 "식별자"(SSN, 운전 면허증 등)를 가질 수 있기 때문에 식별자 테이블이 생성되었습니다. 마스터 테이블은이 모든 것을 연결합니다. 당연히 다른 테이블이 있습니다 : 인구 통계, 주소 등. 그러나 나는 그것들에 관심이 없습니다. – Sesame