문제

표 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 테스트를 제거 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top