1 ~ 0-1 관계의 두 테이블로 기반 삽입을 설정
-
06-07-2019 - |
문제
두 개의 테이블이 있는데, 첫 번째 테이블은 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;
제휴하지 않습니다 StackOverflow