문제

두 개의 테이블이 있는데, 첫 번째 테이블은 ID 인 기본 키가 있고, 두 번째는 기본 키가 없지만, 그 키에는 첫 번째 테이블의 기본 키로 외래 키 제약 조건이 있습니다.

한 번에 한 레코드를 삽입하는 경우 SCOPE_IDENTITY를 사용하여 두 번째 테이블에 삽입하려는 표 1에 방금 삽입 된 PK의 값을 얻을 수 있습니다.

내 문제는 Selects에서 오는 레코드가 많다는 것입니다. 두 테이블에 삽입하려는 Selects 에서이 인서트를 수행하는 세트 기반 방법을 생각할 수 없었습니다.

현재 솔루션은 커서를 사용하고 첫 번째 테이블에 삽입하고 SCOPE_IDENTITY를 사용하여 키를 가져오고 두 번째 테이블에 삽입하고 반복하는 것입니다.

비 쿠저 솔루션이 누락 되었습니까?

도움이 되었습니까?

해결책

예, 온라인에서 책에서 출력 절을 찾으십시오.

다른 팁

이번 주 에이 문제가있었습니다. 누군가 자연스럽게 키가 사용되는 스키마에 무의미한 대리 키가있는 테이블을 소개했습니다. 의심 할 여지없이 곧 문제를 해결할 것입니다. INSERT 출신 : 이것은 영구적이거나 임시 기본 테이블 또는 파생 된 테이블 (아래 참조) 일 수 있으며, 어쨌든 세트 기반 솔루션에 대한 욕구에 적합해야합니다. 이 테이블과 테이블 사이의 결합을 사용하십시오. IDENTITY 자연 키의 열이 자동으로 생성 된 값을 찾으십시오. 간단한 예는 다음과 같습니다.

CREATE TABLE Test1 
(
 surrogate_key INTEGER IDENTITY NOT NULL UNIQUE, 
 natural_key CHAR(10) NOT NULL CHECK (natural_key NOT LIKE '%[^0-9]%') UNIQUE
);

CREATE TABLE Test2
(
 surrogate_key INTEGER NOT NULL UNIQUE
    REFERENCES Test1 (surrogate_key), 
 data_col INTEGER NOT NULL
);

INSERT INTO Test1 (natural_key)
SELECT DT1.natural_key
  FROM (
        SELECT '0000000001', 22
        UNION ALL 
        SELECT '0000000002', 55
        UNION ALL 
        SELECT '0000000003', 99
       ) AS DT1 (natural_key, data_col);

INSERT INTO Test2 (surrogate_key, data_col)
SELECT T1.surrogate_key, DT1.natural_key
  FROM (
        SELECT '0000000001', 22
        UNION ALL 
        SELECT '0000000002', 55
        UNION ALL 
        SELECT '0000000003', 99
       ) AS DT1 (natural_key, data_col)
       INNER JOIN Test1 AS T1
          ON T1.natural_key = DT1.natural_key;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top