문제
표 1에 다음 데이터가 있습니다
문서 ------ Field1
12345
23456
34567
45678
98765
View View1에 다음 데이터가 있습니다
문서 ---- 버스
12345 ------------ 5
23456 ------------ 6
34567 ------------ 8
45678 ------------ 12
98765 ------------ 14
내가하고 싶은 것은 각 행을 업데이트하는 것입니다.
if (표 1.document = view1.document)
그런 다음 표 1.field1 = view1.bus
모든 통찰력이 도움이 될 것입니다.
고맙습니다.
해결책
일반 SQL을 사용하여 수행 할 수 있으며 절차가 필요하지 않습니다.
UPDATE table1 SET field1 = (SELECT bus FROM view1 WHERE table1.document = view1.document)
또는 데이터베이스가 허용하는 경우 :
UPDATE (select table1.field1, view1.bus FROM table1 JOIN view1 ON table1.document = view1.document) SET table1.field1 = view1.bus
다른 팁
Dan이 말했듯이 SQL Server MS에서는이 스타일이 읽기가 더 쉽다는 것을 알 수 있습니다.
UPDATE U SET U.field1 = V.bus FROM table1 AS U JOIN view1 AS V ON V.document = U.document
View1이 주어진 표 1 행 [Document] 값에 대해 여러 행을 가질 수 있다면 테이블 1을 업데이트하기 위해 선택한 [버스] 값은 일치하는 세트 내에서 무작위가됩니다. (이 경우 최대 / 분 등을 선택하도록 쿼리를 수정할 수 있습니다.)
이미 버스 값과 일치하는 행을 업데이트하지 않도록이 쿼리를 개선 할 것입니다.이 쿼드는 재실행되어 이미 표 1에 이미 존재하면 더 빨리 가능합니다.
UPDATE U SET U.field1 = V.bus FROM table1 AS U JOIN view1 AS V ON V.document = U.document WHERE U.field1 = V.bus OR (U.field1 IS NOT NULL AND V.bus IS NULL) OR (U.field1 IS NULL AND V.bus IS NOT NULL)
필드가 널을 허용하지 않는 것으로 정의되면 NULL / NOT NULL 테스트를 제거 할 수 있습니다.
제휴하지 않습니다 StackOverflow