2016-06-29 18 views
-2

私は50列を持つテーブルを持っている、など単一ステートメントの列の更新からSQL更新列

のはa,b,c,dを言うことができます私は、B の新しい値から、およびCからBを更新したいので、 b=b+a,c=c+b ,d = c+ d,..など Update [table] set b=b+a, c= c+b+a..など のような更新をしたくないのですが、各列の更新では、巨大な計算式を書く必要があります。これは各列に対してより大きく複雑になるからです。

私が更新したいテーブルは約5000万行ありますので、複数の更新ステートメントを作成すると自殺率が高くなると思います。

どうすればよいですか? 変数の使用は良い考えだと思いますか?

ありがとう、ごめんなさい。

注:私の質問については申し訳ありません。 既存のテーブルには50の新しい列があります。 最初の新しい列aは、他の表との結合を使用して計算されます。 2番目の新しい列bは、aの新しい値に結果を追加して、他のテーブル(最初の更新と同じテーブル)との結合を使用して計算したい計算に計算されます。 samesロジックは、すべての50列の値を計算するために適用されます。

+0

ご不明な点がありますか? –

+0

テーブルを正規化する必要があります。これらの値は、これに関連する別のテーブルに属しています。そうすれば、更新と式が簡単になります。 –

+0

それで、他の列の値を生成するためにどの列を追加するべきかをどのように知っていますか?列名から導出できる関係はありますか? column1、column2のようなもの?そうでなければ、動的なクエリや他のクエリを書いて、増分を続ける他の列のセットから各列を更新する方法はありますか? – Sam

答えて

0

更新:あなたの質問を更新するための 感謝を。間違いなく、あなたのUPDATEステートメントでSUBQUERIESを使用して、ほとんどの作業を行います。クエリ内のindexesは、ON/WHEREpredicatesSARGを介して利用できます。

あなたのロジックは列のための他のテーブルの上に自己依存しているので、次のようなものが役立ちます。

CREATE TABLE #TABLE1 (ColA INT, ID INT IDENTITY(1,1)) 
INSERT INTO #TABLE1 (ColA) VALUES (1) 
CREATE TABLE #TABLE2 (ColB INT, ID INT IDENTITY(1,1) ) 
INSERT INTO #TABLE2 (ColB) VALUES (4) 
CREATE TABLE #TABLE3 (ColC INT, ID INT IDENTITY(1,1) ) 
INSERT INTO #TABLE3 (ColC) VALUES (10) 

SELECT ColC + B.ColB AS ColC, ColC, B.ColB, B.ColA, B.ORIGINAL, B.ID 
FROM #TABLE3 A 
     RIGHT OUTER JOIN (SELECT ColB + B.ColA AS ColB, ColA, ORIGINAL, B.ID 
          FROM #TABLE2 A 
          RIGHT OUTER JOIN (SELECT ColA + ColB AS ColA, ColB AS ORIGINAL, A.ID 
              FROM #TABLE1 A 
              INNER JOIN #TABLE2 B ON A.ID = B.ID) B ON A.ID = B.ID) B ON A.ID = B.ID 

注簡略化のために、私はちょうど私が保たれてテーブルは、同じID列を持っていたと仮定することを内側のsubqueryIDがリストにあります。 SQLが右から左に(内側のクエリが最初に)行われるので、そのことを覚えておいてください。

これは長い一連の結合である可能性がありますが、少なくとも繰り返しロジックのほとんどは、サブクエリ自体の内部で処理されます。 OUTER JOINSが意味を持ちます。内側のクエリの値を保持し、その新しい計算値を次の外側のと比較したいからです。

0

このような選択からの更新を試すことができます。

UPDATE T 
    SET a = T.a 
     ,b = T.b 
     ,c = T.c 
     ,d = T.d 
     ... 
     ... 
    SELECT a 
     ,b = b + a 
     ,c = c + b 
     ,d = d + c 
     ... 
     ... 
FROM yourtable T 
関連する問題