2017-09-26 90 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 %正確,是什麼問題? – 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