저는 이번 주에이 문제가있었습니다. 누군가 자연스럽게 키가 사용되는 스키마에 의미없는 대리 키가있는 테이블을 도입했기 때문입니다. 의심 할 여지없이 나는 곧이 문제를 해결할 것입니다. 그 전까지는 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;
유망하지만 문제/질문입니다. scope_identity 값을 사용할 수 있도록 입력 행의 올바른 행에 출력 행을 고유하게 일치시키기 위해 출력 절에서 제공하는 충분한 정보가 필요합니다. 항상 사용 가능한 것은 아닙니다. – automatic
항상 고유해야하지 않으면 모든 열을 반환 할 수 있습니다. 고유하지 않을 경우 임시 ID에 대한 테이블의 다른 열을 추가하고 ID가있는 임시 테이블에 삽입 할 데이터를 넣은 다음 삽입 한 다음 그 ID와 실제 식별자를 output 절을 사용하고 temp id 값을 즉시 null로 설정하십시오. 동시성 문제가없는 경우 작동 할 수 있습니다. 동시성 문제가 발생하면 동일한 작업을 GUIDS를 임시 ID로만 사용하고 임시 테이블의 GUID와 일치하는 레코드는 null로 지정해야합니다. – HLGEM