2017-09-26 1 views
0

데이터베이스 테이블이 2 개 있고 공통 테이블 간의 일치를 기반으로 첫 번째 테이블을 업데이트하고 싶습니다. 내가 달성하고자하는 일을 더 나은 방법이 있는지두 개의 SQL Server 테이블에서 값을 비교 한 다음 업데이트하십시오.

UPDATE TestingTool_WeeklyReports 
SET InReleasenotes = CASE WHEN u.functionname IS NULL THEN 'NO' ELSE 'YES' END 
FROM TestingTool_WeeklyReports T1 
OUTER APPLY (SELECT t2.functionname 
      FROM TestDS_DSReleaseNotes T2 
      WHERE T1.Datasourcename = t2.functionname) u 

내 코드가 나에게 예상되는 결과를 제공하지 않는 것, 누군가가 말해 줄 수 : 여기 내 코드는?

+2

가 100을 s의 경우를 올바른, 질문은 무엇입니까 ?? – apomene

+0

샘플 테이블 데이터와 예상 결과를 추가하십시오. (형식이 아닌 텍스트로서 이미지가 아닙니다.) – jarlh

+0

왜 왼쪽 결합을 사용하지 않습니까? –

답변

2

공통 테이블을 사용하여 업데이트 할 수 있습니다. 일치하는 열을 업데이트 한 후에는 Update ... Where IS NULL

;WITH T AS(
    Select * FROM TestingTool_WeeklyReports T1 
    INNER JOIN TestDS_DSReleaseNotes T2 ON T1.Datasourcename = t2.functionname) 
Update T SET InReleasenotes = 'YES' 
0

에 의해 타의 추종을 불허하는 열의 나머지를 업데이트 할 수 있습니다 나는이 같은 간단한 UPDATE (CTE를 사용할 필요가 없습니다)를 쓸 수 있다고 생각합니다. 이 형식에서는 UPDATE 라인을 주석 및 테스트에 대한 결과를보기 위해 SELECT를 사용할 수 있습니다

UPDATE A SET InReleasenotes = CASE WHEN B.functionname IS NULL THEN 'N' ELSE 'Y' END 
/* SELECT * */ 
FROM TestingTool_WeeklyReports A 
LEFT JOIN TestDS_DSReleaseNotes B ON A.Datasourcename = B.functionname; 

샘플 데이터 : 갱신 후

CREATE TABLE TestingTool_WeeklyReports (Datasourcename VARCHAR(20), InReleasenotes VARCHAR(1)) 
INSERT INTO TestingTool_WeeklyReports VALUES ('AAA',NULL) 
INSERT INTO TestingTool_WeeklyReports VALUES ('BBB',NULL) 
CREATE TABLE TestDS_DSReleaseNotes (functionname VARCHAR(20)) 
INSERT INTO TestDS_DSReleaseNotes VALUES ('AAA'); 

출력은 :

Datasourcename InReleasenotes 
AAA    Y 
BBB    N 
관련 문제