2016-04-25 97 views
0

我覺得這個代碼是更好地展示,我想做的事:SQL服務器更新/活動列

UPDATE A 
SET A.[Changed] = 1 
FROM [dbo].[Table1] A 
INNER JOIN [Table2] E 
     ON [A].[Part] = [E].[ActivePart] 

UPDATE [dbo].[Table1] 
    [Range] = [Range] 
WHERE [Partgroup] = [Partgroup] AND [Changed] > 0 

之前更新:

enter image description here

後更新:

enter image description here

請幫忙。

非常感謝。

格爾茨 Vegeta_77

+0

首先,我想你在你的代碼中的幾個位置混合了A和E ......你似乎再次用值本身更新了值。此外,在WHERE中:A. [Plan-TGrp-Spanne_Stfl1] <> A. [Plan-TGrp-Spanne_Stfl1]不應該是真的......請您澄清在糾正別名後您遇到的錯誤嗎? – Tyron78

+0

嗨雷內。你的意思是,它必須是:ON E = A而不是E = A?沒有錯誤,但聲明只更新了所有行的1行。最後一行的Plan-Column被更改應該是update-Statement的前導列。 –

+0

說實話,我想知道爲什麼ANY行已經更新了。你可以用自己的值更新表A(set a。[col1] = a。[col1])ans然後用一個不可能的比較(WHERE a。[col2] <> a。[col2])重新整理整個語句。 ..你確定,任何一行已被更新?我會建議像「set a.col1 = e.col1 ... WHERE a.col2 = e.col2 AND a.col3 <> e.col3 ...」 – Tyron78

回答

0

好的。這裏是解決方案:

UPDATE [Table1] 
SET [Range] = (SELECT [Range] 
       FROM [Table1] A 
       INNER JOIN [Table2] E 
        ON [A].[Part] = [E].[ActivePart]) 
WHERE [Partgroup] = (SELECT [Partgroup] 
        FROM [Table1] B 
        INNER JOIN [Table2] F 
         ON [B].[Part] = [F].[ActivePart]) 

有時候,我覺得complicatet。 Thx Rene。

0

是,第一部分看起來更好(即使我覺得不需要WHERE,因爲它涉及同一列您要加入的)。然而,第二次更新應該不會產生任何變化:

UPDATE [dbo].[Superliste_000] 
SET [Plan-TGrp-Spanne_Stfl1] = [Plan-TGrp-Spanne_Stfl1], 
    [Plan-TGrp-Spanne_Stfl2] = [Plan-TGrp-Spanne_Stfl2], 
    [Plan-TGrp-Spanne_Stfl3] = [Plan-TGrp-Spanne_Stfl3], 
    [Plan-TGrp-Spanne_Stfl4] = [Plan-TGrp-Spanne_Stfl4] 
WHERE [Teilegruppe] = [Teilegruppe] AND [Date_change] > 0 

再次更新[計劃 - TGrp-Spanne_Stfl1]與[計劃 - TGrp-Spanne_Stfl1] - 這是相同的價值......無論是我太厭倦並誤解代碼或在更新中存在另一個小錯誤。 ;-)