UPDATEステートメントを作成するとき、+ =を使用すると、いずれかの側に列を追加し、左側の列に保存すると考えました。これは、SELECTステートメントと変数ではなく、UPDATEステートメントの列では機能しないようです。TSQLでは、列で+ =を使用してUPDATEを実行しても、後続の値が追加されないのはなぜですか?
更新ステートメントは、CROSS JOINからの最小値を選択してその操作を実行するだけですが、値(2,3,4)を含む残りの行を無視しているようです。私は最後のSELECTが@Val = 10、Val = 10を返すと思っていたでしょう
なぜ値(2,3,4)がUPDATE文の列に追加されませんか?何をしたい
SELECT 0 AS Val INTO #MyTable
DECLARE @Val AS INT = 0
UPDATE MyTable
SET MyTable.Val += TableValues.AddVal
FROM #MyTable MyTable
CROSS JOIN (
SELECT 1 AS AddVal
UNION SELECT 2 AS AddVal
UNION SELECT 3 AS AddVal
UNION SELECT 4 AS AddVal
) TableValues
SELECT @Val += TableValues.AddVal
FROM #MyTable MyTable
CROSS JOIN (
SELECT 1 AS AddVal
UNION SELECT 2 AS AddVal
UNION SELECT 3 AS AddVal
UNION SELECT 4 AS AddVal
) TableValues
SELECT @Val AS [@Val], * FROM #MyTable
DROP TABLE #MyTable
更新はループではありません - あなたは、選択から値を更新するためにそれを告げたではなく、あなたがしたい値のそれを言いましたそれはselect - > 0 + 1 = 1から戻って来る最初の値を加えることによって機能します。それはあなたが 'SUM'を望むように聞こえます:) – Bridge
@Bridge、私はSELECTとUPDATEが同様のファッション。私はSELECTの '@Val'をUPDATEのMYTable.Valに相当するものと見ます。値を足し合わせることで、クエリの内容は変わりませんが、UPDATEとSELECTの動作に違いがある理由はわかりません。 –