2017-10-11 3 views
-1

두 개의 테이블이 있습니다. 첫 번째 테이블의 레코드를 기반으로 두 번째 테이블을 삽입하거나 업데이트해야하며 INVE_KEY, EVEN_KEY (둘 모두의 조합이 고유해야 함)입니다.첫 번째 테이블의 행을 기반으로 두 번째 테이블의 행을 삽입 또는 업데이트하십시오.

첫 번째 테이블 = @

번째 테이블 = @ 1 실시 예

TBL2 TBL1 : 초 표 alredy INVE_KEY = 1을 갖는다

경우 EVEN_KEY = 2, 제 테이블 INVE_KEY을 갖는다 = 1, EVEN_KEY = 2,이 행은 두 번째 테이블 (열 QUA)에서만 업데이트됩니다.

예 2 : 두번째 테이블 INVE_KEY없는

경우 = 3 EVEN_KEY = 1,이 행 제 표의 두 번째 테이블에 삽입한다.

내 문제는 내가 테이블에서 테이블로 삽입하는 방법을 모르고 동시에 각 레코드가 두 번째 테이블에 있는지 확인하는 것입니다.

첫 번째 테이블 :

+----------+----------+-----+ 
| INVE_KEY | EVEN_KEY | QUA | 
+----------+----------+-----+ 
|  1 |  1 | 3 | 
|  2 |  1 | 4 | 
|  3 |  1 | 5 | 
|  4 |  1 | 6 | 
+----------+----------+-----+ 

번째 테이블 :

+----------+----------+-----+ 
| INVE_KEY | EVEN_KEY | QUA | 
+----------+----------+-----+ 
|  3 |  1 | 0 | 
|  4 |  1 | 0 | 
+----------+----------+-----+ 

초 테이블을 업데이트하는 예상 결과 후 : 두 테이블

+----------+----------+-----+ 
| INVE_KEY | EVEN_KEY | QUA | 
+----------+----------+-----+ 
|  1 |  1 | 3 |(inserted) 
|  2 |  1 | 4 |(inserted) 
|  3 |  1 | 5 |(updated QUA) 
|  4 |  1 | 6 |(updated QUA) 
+----------+----------+-----+ 

작성 및 데이터 :

declare @tbl1 table 
      (
      INVE_KEY INT, 
      EVEN_KEY INT, 
      QUA INT 
     ) 

      declare @tbl2 table 
      (
      INVE_KEY INT, 
      EVEN_KEY INT, 
      QUA INT 
     ) 


      insert into @tbl1(inve_Key, even_Key, qua) 
      values(1, 1, 3),(2,1,4),(3,1,5),(4,1,6) 

      insert into @tbl2(inve_Key, even_Key, qua) 
      values(3,1,0),(4,1,0) 
+0

2 문에 작업을 수행하려고주십시오. 먼저 기존 레코드를 업데이트하십시오 (UPDATE FROM 구문에 대해 Google에 알려주십시오). 두 번째 - 누락 된 레코드 삽입 –

+0

두 번째 테이블을 먼저 자른 다음 첫 번째 테이블의 예상 결과를 전체 테이블에 채우는 것이 어떨까요? –

+0

머지 (MERGE) 보셨습니까? https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql –

답변

1

이가

MERGE INTO TargetTable AS TargetTable 
    USING SourceTable AS SourceTable 
    ON (TargetTable.INVE_KEY = SourceTable.INVE_KEY) -- business keys only 
    and (TargetTable.EVEN_KEY = SourceTable.EVEN_KEY) 
    -- Insert the new rows 
    WHEN NOT MATCHED -- New records 
    THEN 
    INSERT (INVE_KEY, 
      EVEN_KEY, 
      QUA 

      ) 
    VALUES 
    (  SourceTable.INVE_KEY, 
      SourceTable.EVEN_KEY, 
-- Updates 

    WHEN MATCHED AND (TargetTable.QUA <> SourceTable.QUA 
      ) THEN 

    UPDATE SET 
    TargetTable.QUA = SourceTableQUA ; 
+0

매력처럼 작동합니다.) 아마도이 문서에 대한 좋은 링크가 있습니까? – FrenkyB

+0

MERGE 문은 사용하지 않는 것이 좋습니다. 대신 INSERT/UPDATE를 사용하는 것이 좋습니다. MERGE 구문은 상당히 어렵고 고정 된 버그가 아닌 수의 버그가 있습니다. 다른 방법으로는 대부분의 경우 성능에 도움이되지 않습니다. –

+0

더 좋은 제안이 있습니까? 내가 생각할 수있는 것은 모두 병합보다 커서가 커서입니다. 병합하지 않으면 대신 커서를 사용합니다. 병합을 사용하지 않는 특정 예제에 대한 코드를 표시 할 수 있습니까? – FrenkyB

관련 문제