2011-10-21 27 views
0

真的可以使用一些幫助更新查詢...(SQL Serer 2008 R2 Express) 我有兩個表,tblJPtblMaster嘗試SQL表更新匹配字符串字段

我只有一個字符串字段匹配兩個表。

tblJP AND tblMaster 

我需要tblMaster.Long_text更新tblJP.LangString

tblJP.short_text = tblMaster.short_text AND tblMaster.Lang = 'jp' 

任何幫助將不勝感激。我正在旋轉自己的輪子,嘗試各種邏輯和語法,從創建臨時表到其他類型的連接都沒有運氣。

回答

6

一個簡單的更新與INNER JOIN應該做的伎倆。

UPDATE  tblJP 
SET  tblJP.LangString = tblMaster.Long_Text 
FROM  tblJP 
INNER JOIN tblMaster ON tblMaster.alt_text = tblJP.short_text 
WHERE  tblMaster.Lang = 'jp' 

警告:從來沒有首先測試它與顯影服務器上運行對生產服務器的更新語句 - 尤其是當別人寫的SQL。

+0

+1免責聲明!這可能會導致不確定的結果,如果有多個匹配的連接行(使用'merge'避免了一個問題) –

+1

另外,關於James的警告:我喜歡用'BEGIN TRANSACTION'啓動任何更新語句,並用' - COMMIT'。然後我可以檢查受影響的行數,並選擇並按F5提交,如果這是我所期望的。 (雖然這不驗證數據更改...) –

+0

感謝它完美的工作。 – htm11h

1

你也可以使用MERGE

MERGE INTO tblJP 
USING (SELECT * 
     FROM tblMaster 
     WHERE Lang = 'jp') AS SOURCE 
ON SOURCE.alt_text = tblJP.short_text 
WHEN MATCHED THEN 
    UPDATE SET LangString = SOURCE.Long_Text; 

在事件中JOIN返回多行,你會被警告的問題與錯誤The MERGE statement attempted to UPDATE or DELETE the same row more than once.

+0

感謝您發佈此信息。我看到了您的評論,但我從未使用過「MERGE」,所以我不確定如何將其納入我的答案。 –